# Init import os import re import ctypes from route.tool.func import * from route import * # Init-Version with open('version.json', encoding = 'utf8') as file_data: version_list = json.loads(file_data.read()) # Init-DB data_db_set = class_check_json() db_data_get(data_db_set['type']) do_db_set(data_db_set) with get_db_connect() as conn: curs = conn.cursor() setup_tool = '' try: curs.execute(db_change('select data from other where name = "ver"')) except: setup_tool = 'init' if setup_tool != 'init': ver_set_data = curs.fetchall() if ver_set_data: if int(version_list['beta']['c_ver']) > int(ver_set_data[0][0]): setup_tool = 'update' else: setup_tool = 'normal' else: setup_tool = 'init' if data_db_set['type'] == 'mysql': try: curs.execute(db_change( 'create database ' + data_db_set['name'] + ' ' + \ 'default character set utf8mb4' )) except: try: curs.execute(db_change( 'alter database ' + data_db_set['name'] + ' ' + \ 'character set utf8mb4' )) except: pass conn.select_db(data_db_set['name']) if setup_tool != 'normal': create_data = get_db_table_list() for create_table in create_data: for create in ['test'] + create_data[create_table]: db_pass = 0 try: curs.execute(db_change('select ' + create + ' from ' + create_table + ' limit 1')) db_pass = 1 except: pass if db_pass == 0: try: curs.execute(db_change('create table ' + create_table + '(test longtext default (""))')) db_pass = 1 except: pass if db_pass == 0: try: curs.execute(db_change('create table ' + create_table + '(test longtext default "")')) db_pass = 1 except: pass if db_pass == 0: try: curs.execute(db_change('create table ' + create_table + '(test longtext)')) db_pass = 1 except: pass if db_pass == 0: try: curs.execute(db_change("alter table " + create_table + " add column " + create + " longtext default ('')")) db_pass = 1 except: pass if db_pass == 0: try: curs.execute(db_change("alter table " + create_table + " add column " + create + " longtext default ''")) db_pass = 1 except: pass if db_pass == 0: try: curs.execute(db_change("alter table " + create_table + " add column " + create + " longtext")) db_pass = 1 except: pass if db_pass == 0: raise try: curs.execute(db_change("create index history_index on history (title, ip)")) except: pass if setup_tool == 'update': update(int(ver_set_data[0][0]), set_data) else: set_init() set_init_always(version_list['beta']['c_ver']) # Init-Route class EverythingConverter(werkzeug.routing.PathConverter): def __init__(self, map): super(EverythingConverter, self).__init__(map) self.regex = r'.*?' def to_python(self, value): return re.sub(r'^\\\.', '.', value) class RegexConverter(werkzeug.routing.BaseConverter): def __init__(self, url_map, *items): super(RegexConverter, self).__init__(url_map) self.regex = items[0] app = flask.Flask( __name__, template_folder = './' ) app.config['JSON_AS_ASCII'] = False app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True log = logging.getLogger('waitress') log.setLevel(logging.ERROR) app.jinja_env.filters['md5_replace'] = md5_replace app.jinja_env.filters['load_lang'] = load_lang app.jinja_env.filters['cut_100'] = cut_100 app.url_map.converters['everything'] = EverythingConverter app.url_map.converters['regex'] = RegexConverter curs.execute(db_change('select data from other where name = "key"')) sql_data = curs.fetchall() app.secret_key = sql_data[0][0] print('----') # Init-DB_Data server_set = {} server_set_var = get_init_set_list() server_set_env = { 'host' : os.getenv('NAMU_HOST'), 'port' : os.getenv('NAMU_PORT'), 'language' : os.getenv('NAMU_LANG'), 'markup' : os.getenv('NAMU_MARKUP'), 'encode' : os.getenv('NAMU_ENCRYPT') } for i in server_set_var: curs.execute(db_change('select data from other where name = ?'), [i]) server_set_val = curs.fetchall() if server_set_val: server_set_val = server_set_val[0][0] elif server_set_env[i] != None: server_set_val = server_set_env[i] curs.execute(db_change('insert into other (name, data, coverage) values (?, ?, "")'), [i, server_set_env[i]]) else: if 'list' in server_set_var[i]: print(server_set_var[i]['display'] + ' (' + server_set_var[i]['default'] + ') [' + ', '.join(server_set_var[i]['list']) + ']' + ' : ', end = '') else: print(server_set_var[i]['display'] + ' (' + server_set_var[i]['default'] + ') : ', end = '') server_set_val = input() if server_set_val == '': server_set_val = server_set_var[i]['default'] elif server_set_var[i]['require'] == 'select': if not server_set_val in server_set_var[i]['list']: server_set_val = server_set_var[i]['default'] curs.execute(db_change('insert into other (name, data, coverage) values (?, ?, "")'), [i, server_set_val]) print(server_set_var[i]['display'] + ' : ' + server_set_val) server_set[i] = server_set_val print('----') # Init-DB_care if data_db_set['type'] == 'sqlite': def back_up(back_time, back_up_where): print('----') try: shutil.copyfile( data_db_set['name'] + '.db', back_up_where ) print('Back up : OK') except: print('Back up : Error') threading.Timer( 60 * 60 * back_time, back_up, [back_time, back_up_where] ).start() curs.execute(db_change('select data from other where name = "back_up"')) back_time = curs.fetchall() back_time = int(number_check(back_time[0][0])) if back_time and back_time != '' else 0 if back_time != 0: curs.execute(db_change('select data from other where name = "backup_where"')) back_up_where = curs.fetchall() if back_up_where and back_up_where[0][0] != '': back_up_where = back_up_where[0][0] else: back_up_where = 'back_' + data_db_set['name'] + '.db' print('Back up state : ' + str(back_time) + ' hours') back_up(back_time, back_up_where) else: print('Back up state : Turn off') print('Now running... http://localhost:' + server_set['port']) conn.commit() # Init-custom if os.path.exists('custom.py'): from custom import custom_run custom_run('error', app) # Func # Func-inter_wiki app.route('/inter_wiki', defaults = { 'tool' : 'inter_wiki' })(filter_inter_wiki) app.route('/inter_wiki/del/', defaults = { 'tool' : 'del_inter_wiki' })(filter_inter_wiki_delete) app.route('/inter_wiki/add', methods = ['POST', 'GET'], defaults = { 'tool' : 'plus_inter_wiki' })(filter_inter_wiki_add) app.route('/inter_wiki/add/', methods = ['POST', 'GET'], defaults = { 'tool' : 'plus_inter_wiki' })(filter_inter_wiki_add) app.route('/filter/document/list')(filter_document) app.route('/filter/document/add/', methods = ['POST', 'GET'])(filter_document_add) app.route('/filter/document/add', methods = ['POST', 'GET'])(filter_document_add) app.route('/filter/document/del/')(filter_document_delete) app.route('/edit_top', defaults = { 'tool' : 'edit_top' })(filter_inter_wiki) app.route('/edit_top/del/', defaults = { 'tool' : 'del_edit_top' })(filter_inter_wiki_delete) app.route('/edit_top/add', methods = ['POST', 'GET'], defaults = { 'tool' : 'plus_edit_top' })(filter_inter_wiki_add) app.route('/image_license', defaults = { 'tool' : 'image_license' })(filter_inter_wiki) app.route('/image_license/del/', defaults = { 'tool' : 'del_image_license' })(filter_inter_wiki_delete) app.route('/image_license/add', methods = ['POST', 'GET'], defaults = { 'tool' : 'plus_image_license' })(filter_inter_wiki_add) app.route('/edit_filter', defaults = { 'tool' : 'edit_filter' })(filter_inter_wiki) app.route('/edit_filter/del/', defaults = { 'tool' : 'del_edit_filter' })(filter_inter_wiki_delete) app.route('/edit_filter/add', methods = ['POST', 'GET'], defaults = { 'tool' : 'plus_edit_filter' })(filter_inter_wiki_add) app.route('/edit_filter/add/', methods = ['POST', 'GET'], defaults = { 'tool' : 'plus_edit_filter' })(filter_inter_wiki_add) app.route('/email_filter', defaults = { 'tool' : 'email_filter' })(filter_inter_wiki) app.route('/email_filter/del/', defaults = { 'tool' : 'del_email_filter' })(filter_inter_wiki_delete) app.route('/email_filter/add', methods = ['POST', 'GET'], defaults = { 'tool' : 'plus_email_filter' })(filter_inter_wiki_add) app.route('/file_filter', defaults = { 'tool' : 'file_filter' })(filter_inter_wiki) app.route('/file_filter/del/', defaults = { 'tool' : 'del_file_filter' })(filter_inter_wiki_delete) app.route('/file_filter/add', methods = ['POST', 'GET'], defaults = { 'tool' : 'plus_file_filter' })(filter_inter_wiki_add) app.route('/name_filter', defaults = { 'tool' : 'name_filter' })(filter_inter_wiki) app.route('/name_filter/del/', defaults = { 'tool' : 'del_name_filter' })(filter_inter_wiki_delete) app.route('/name_filter/add', methods = ['POST', 'GET'], defaults = { 'tool' : 'plus_name_filter' })(filter_inter_wiki_add) app.route('/extension_filter', defaults = { 'tool' : 'extension_filter' })(filter_inter_wiki) app.route('/extension_filter/del/', defaults = { 'tool' : 'del_extension_filter' })(filter_inter_wiki_delete) app.route('/extension_filter/add', methods = ['POST', 'GET'], defaults = { 'tool' : 'plus_extension_filter' })(filter_inter_wiki_add) # Func-list # /list/document/old app.route('/list/document/old')(list_old_page) app.route('/list/document/old/')(list_old_page) # /list/document/acl app.route('/list/document/acl')(list_acl) app.route('/list/document/acl/')(list_acl) # /list/document/need app.route('/list/document/need')(list_please) app.route('/list/document/need/')(list_please) # /list/document/all app.route('/list/document/all')(list_title_index) app.route('/list/document/all/')(list_title_index) # /list/document/long app.route('/list/document/long')(list_long_page) # /list/document/short app.route('/list/document/short', defaults = { 'tool' : 'short_page' })(list_long_page) # /list/file app.route('/list/file')(list_image_file) # /list/admin # /list/admin/list app.route('/list/admin')(list_admin) # /list/admin/auth_use app.route('/list/admin/auth_use', methods = ['POST', 'GET'])(list_admin_auth_use) app.route('/list/admin/auth_use//', methods = ['POST', 'GET'])(list_admin_auth_use) # /list/user app.route('/list/user')(list_user) app.route('/list/user/')(list_user) # /list/user/check @app.route('/check/') def give_user_check(name = None): return give_user_check_2(name) # /list/user/check/delete @app.route('/check_delete', methods = ['POST', 'GET']) def give_user_check_delete(): return give_user_check_delete_2() # Func-auth # /auth/give # /auth/give/ app.route('/auth/give', methods = ['POST', 'GET'])(give_auth) app.route('/auth/give/', methods = ['POST', 'GET'])(give_auth) # /auth/give # /auth/give/ app.route('/auth/give/ban', methods = ['POST', 'GET'])(give_user_ban) app.route('/auth/give/ban/', methods = ['POST', 'GET'])(give_user_ban) app.route('/auth/give/ban_regex/', methods = ['POST', 'GET'], defaults = { 'ban_type' : 'regex' })(give_user_ban) app.route('/auth/give/ban_multiple', methods = ['POST', 'GET'], defaults = { 'ban_type' : 'multiple' })(give_user_ban) # /auth/list @app.route('/admin_group') def list_admin_group(): return list_admin_group_2() # /auth/list/add/ @app.route('/admin_plus/', methods = ['POST', 'GET']) def give_admin_groups(name = None): return give_admin_groups_2(name) # /auth/list/delete/ @app.route('/delete_admin_group/', methods = ['POST', 'GET']) def give_delete_admin_group(name = None): return give_delete_admin_group_2(name) app.route('/auth/give/fix/', methods = ['POST', 'GET'])(give_user_fix) @app.route('/app_submit', methods = ['POST', 'GET']) def recent_app_submit(): return recent_app_submit_2() # /auth/history # ongoing 반영 필요 @app.route('/block_log') @app.route('/block_log//') @app.route('/block_log//') def recent_block(name = 'Test', tool = 'all'): return recent_block_2(name, tool) # Func-history app.route('/recent_change')(recent_change) app.route('/recent_changes')(recent_change) app.route('/record/', defaults = { 'tool' : 'record' })(recent_change) app.route('/record/reset/', methods = ['POST', 'GET'])(recent_record_reset) app.route('/record/topic/')(recent_record_topic) app.route('/history/', defaults = { 'tool' : 'history' }, methods = ['POST', 'GET'])(recent_change) app.route('/history_tool//')(recent_history_tool) app.route('/history_delete//', methods = ['POST', 'GET'])(recent_history_delete) app.route('/history_hidden//')(recent_history_hidden) app.route('/history_send//', methods = ['POST', 'GET'])(recent_history_send) app.route('/history_reset/', methods = ['POST', 'GET'])(recent_history_reset) app.route('/history_add/', methods = ['POST', 'GET'])(recent_history_add) app.route('/history_add_preview/', defaults = { 'do_type' : 'preview' }, methods = ['POST'])(recent_history_add) # Func-view app.route('/xref/')(view_xref) app.route('/xref_this/', defaults = { 'xref_type' : 2 })(view_xref) app.route('/raw/')(view_raw_2) app.route('/raw_acl/', defaults = { 'doc_acl' : 1 })(view_raw_2) app.route('/raw_rev//')(view_raw_2) app.route('/diff///')(view_diff) app.route('/down/')(view_down) app.route('/acl/', methods = ['POST', 'GET'])(view_acl) # everything 다음에 추가 붙은 경우에 대해서 재검토 필요 (진행중) app.route('/w_rev//')(view_read) app.route('/w_from/', defaults = { 'do_type' : 'from' })(view_read) app.route('/w/')(view_read) app.route('/random')(view_random) # Func-edit app.route('/edit/', methods = ['POST', 'GET'])(edit) app.route('/edit_preview/', defaults = { 'do_type' : 'preview' }, methods = ['POST'])(edit) app.route('/edit_from/', defaults = { 'do_type' : 'load' })(edit) app.route('/edit_section//', methods = ['POST', 'GET'])(edit) app.route('/edit_section_preview//', defaults = { 'do_type' : 'preview' }, methods = ['POST'])(edit) app.route('/upload', methods = ['POST', 'GET'])(edit_upload) # 개편 예정 app.route('/xref_reset/')(edit_backlink_reset) app.route('/delete/', methods = ['POST', 'GET'])(edit_delete) app.route('/delete_file/', methods = ['POST', 'GET'])(edit_delete_file) app.route('/delete_multiple', methods = ['POST', 'GET'])(edit_delete_multiple) app.route('/revert//', methods = ['POST', 'GET'])(edit_revert) app.route('/move/', methods = ['POST', 'GET'])(edit_move) # Func-topic app.route('/recent_discuss', defaults = { 'tool' : 'normal' })(recent_discuss) app.route('/recent_discuss/close', defaults = { 'tool' : 'close' })(recent_discuss) app.route('/recent_discuss/open', defaults = { 'tool' : 'open' })(recent_discuss) app.route('/thread/', methods = ['POST', 'GET'])(topic) app.route('/thread/0/', defaults = { 'topic_num' : '0' }, methods = ['POST', 'GET'])(topic) app.route('/thread_preview/', defaults = { 'do_type' : 'preview' }, methods = ['POST'])(topic) app.route('/topic/', methods = ['POST', 'GET'])(topic_list) app.route('/thread//tool')(topic_tool) app.route('/thread//setting', methods = ['POST', 'GET'])(topic_tool_setting) app.route('/thread//acl', methods = ['POST', 'GET'])(topic_tool_acl) app.route('/thread//delete', methods = ['POST', 'GET'])(topic_tool_delete) app.route('/thread//change', methods = ['POST', 'GET'])(topic_tool_change) app.route('/thread//comment//tool')(topic_comment_tool) app.route('/thread//comment//notice')(topic_comment_notice) app.route('/thread//comment//blind')(topic_comment_blind) app.route('/thread//comment//raw')(view_raw_2) app.route('/thread//comment//delete', methods = ['POST', 'GET'])(topic_comment_delete) # Func-user app.route('/change', methods = ['POST', 'GET'])(user_setting) app.route('/change/key')(user_setting_key) app.route('/change/key/delete')(user_setting_key_delete) app.route('/change/pw', methods = ['POST', 'GET'])(user_setting_pw) app.route('/change/head', methods=['GET', 'POST'], defaults = { 'skin_name' : '' })(user_setting_head) app.route('/change/head/', methods=['GET', 'POST'])(user_setting_head) app.route('/change/head_reset', methods=['GET', 'POST'])(user_setting_head_reset) app.route('/change/skin_set')(user_setting_skin_set) app.route('/change/top_menu', methods=['GET', 'POST'])(user_setting_top_menu) # 하위 호환용 S app.route('/skin_set')(user_setting_skin_set) # 하위 호환용 E app.route('/change/skin_set/main', methods = ['POST', 'GET'])(user_setting_skin_set_main) app.route('/user')(user_info) app.route('/user/')(user_info) app.route('/challenge')(user_challenge) app.route('/count')(user_count) app.route('/count/')(user_count) app.route('/alarm')(user_alarm) app.route('/alarm/delete')(user_alarm_delete) app.route('/watch_list', defaults = { 'tool' : 'watch_list' })(user_watch_list) app.route('/watch_list/', defaults = { 'tool' : 'watch_list' })(user_watch_list_name) app.route('/star_doc', defaults = { 'tool' : 'star_doc' })(user_watch_list) app.route('/star_doc/', defaults = { 'tool' : 'star_doc' })(user_watch_list_name) # 개편 보류중 S @app.route('/change/email', methods = ['POST', 'GET']) def user_setting_email(): return user_setting_email_2() app.route('/change/email/delete')(user_setting_email_delete) @app.route('/change/email/check', methods = ['POST', 'GET']) def user_setting_email_check(): return user_setting_email_check_2() # 개편 보류중 E # Func-login # 개편 예정 # login -> login/2fa -> login/2fa/email with login_id # register -> register/email -> regiter/email/check with reg_id # pass_find -> pass_find/email with find_id @app.route('/login', methods = ['POST', 'GET']) def login_login(): return login_login_2() @app.route('/login/2fa', methods = ['POST', 'GET']) def login_login_2fa(): return login_login_2fa_2() @app.route('/register', methods = ['POST', 'GET']) def login_register(): return login_register_2() @app.route('/register/email', methods = ['POST', 'GET']) def login_register_email(): return login_register_email_2() @app.route('/register/email/check', methods = ['POST', 'GET']) def login_register_email_check(): return login_register_email_check_2() @app.route('/register/submit', methods = ['POST', 'GET']) def login_register_submit(): return login_register_submit_2() app.route('/login/find')(login_find) app.route('/login/find/key', methods = ['POST', 'GET'])(login_find_key) app.route('/login/find/email', methods = ['POST', 'GET'], defaults = { 'tool' : 'pass_find' })(login_find_email) app.route('/login/find/email/check', methods = ['POST', 'GET'], defaults = { 'tool' : 'check_key' })(login_find_email_check) app.route('/logout')(login_logout) # Func-vote app.route('/vote/', methods = ['POST', 'GET'])(vote_select) app.route('/vote/end/')(vote_end) app.route('/vote/close/')(vote_close) app.route('/vote', defaults = { 'list_type' : 'normal' })(vote_list) app.route('/vote/list', defaults = { 'list_type' : 'normal' })(vote_list) app.route('/vote/list/', defaults = { 'list_type' : 'normal' })(vote_list) app.route('/vote/list/close', defaults = { 'list_type' : 'close' })(vote_list) app.route('/vote/list/close/', defaults = { 'list_type' : 'close' })(vote_list) app.route('/vote/add', methods = ['POST', 'GET'])(vote_add) # Func-bbs app.route('/bbs/main')(bbs_main) app.route('/bbs/make', methods = ['POST', 'GET'])(bbs_make) # app.route('/bbs/main/set') app.route('/bbs/w/')(bbs_w) app.route('/bbs/set/', methods = ['POST', 'GET'])(bbs_w_set) app.route('/bbs/edit/', methods = ['POST', 'GET'])(bbs_edit) app.route('/bbs/edit/preview/', methods = ['POST', 'GET'], defaults = { 'do_type' : 'preview' })(bbs_edit) app.route('/bbs/w//', methods = ['POST', 'GET'])(bbs_w_post) app.route('/bbs/edit//', methods = ['POST', 'GET'])(bbs_edit) app.route('/bbs/edit/preview//', methods = ['POST', 'GET'], defaults = { 'do_type' : 'preview' })(bbs_edit) app.route('/bbs/w/preview//', methods = ['POST'], defaults = { 'do_type' : 'preview' })(bbs_w_post) # app.route('/bbs/edit//') # Func-api app.route('/api/w//doc_tool//doc_rev/')(api_w) app.route('/api/w//doc_tool/', methods = ['POST', 'GET'])(api_w) app.route('/api/w/', methods = ['GET', 'POST'])(api_w) app.route('/api/raw/')(api_raw) app.route('/api/version', defaults = { 'version_list' : version_list })(api_version) app.route('/api/skin_info')(api_skin_info) app.route('/api/skin_info/')(api_skin_info) app.route('/api/user_info/', methods = ['POST', 'GET'])(api_user_info) app.route('/api/setting/')(api_setting) app.route('/api/thread////')(api_topic) app.route('/api/thread///')(api_topic) app.route('/api/thread//')(api_topic) app.route('/api/thread/')(api_topic) app.route('/api/search//doc_num//')(api_search) app.route('/api/search/')(api_search) app.route('/api/recent_change/')(api_recent_change) app.route('/api/recent_change')(api_recent_change) # recent_changes -> recent_change app.route('/api/recent_changes')(api_recent_change) app.route('/api/recent_discuss//')(api_recent_discuss) app.route('/api/recent_discuss/')(api_recent_discuss) app.route('/api/recent_discuss')(api_recent_discuss) app.route('/api/lang/', methods = ['POST', 'GET'])(api_func_lang) app.route('/api/sha224/', methods = ['POST', 'GET'])(api_func_sha224) app.route('/api/title_index')(api_title_index) app.route('/api/image/', methods = ['POST', 'GET'])(api_image_view) # Func-main # 여기도 전반적인 조정 시행 예정 app.route('/other')(main_tool_other) app.route('/manager', methods = ['POST', 'GET'])(main_tool_admin) app.route('/manager/', methods = ['POST', 'GET'])(main_tool_redirect) app.route('/manager//', methods = ['POST', 'GET'])(main_tool_redirect) # app.route('/guide/')(main_tool_guide) app.route('/search', methods=['POST'])(main_search) app.route('/search/', methods = ['POST', 'GET'])(main_search_deep) app.route('/search//', methods = ['POST', 'GET'])(main_search_deep) app.route('/search_data/', defaults = { 'search_type' : 'data' }, methods = ['POST', 'GET'])(main_search_deep) app.route('/search_data//', defaults = { 'search_type' : 'data' }, methods = ['POST', 'GET'])(main_search_deep) app.route('/goto', methods=['POST'])(main_search_goto) app.route('/goto/', methods=['POST'])(main_search_goto) app.route('/setting')(main_setting) app.route('/setting/main', defaults = { 'db_set' : data_db_set['type'] }, methods = ['POST', 'GET'])(main_setting_main) app.route('/setting/main/logo', methods = ['POST', 'GET'])(main_setting_main_logo) app.route('/setting/top_menu', methods = ['POST', 'GET'])(main_setting_top_menu) app.route('/setting/phrase', methods = ['POST', 'GET'])(main_setting_phrase) app.route('/setting/head', defaults = { 'num' : 3 }, methods = ['POST', 'GET'])(main_setting_head) app.route('/setting/head/', defaults = { 'num' : 3 }, methods = ['POST', 'GET'])(main_setting_head) app.route('/setting/body/top', defaults = { 'num' : 4 }, methods = ['POST', 'GET'])(main_setting_head) app.route('/setting_preview/body/top', defaults = { 'num' : 4, 'set_preview' : 1 }, methods = ['POST'])(main_setting_head) app.route('/setting/body/bottom', defaults = { 'num' : 7 }, methods = ['POST', 'GET'])(main_setting_head) app.route('/setting_preview/body/bottom', defaults = { 'num' : 7, 'set_preview' : 1 }, methods = ['POST'])(main_setting_head) app.route('/setting/robot', methods = ['POST', 'GET'])(main_setting_robot) app.route('/setting/external', methods = ['POST', 'GET'])(main_setting_external) app.route('/setting/acl', methods = ['POST', 'GET'])(main_setting_acl) app.route('/setting/sitemap', methods = ['POST', 'GET'])(main_setting_sitemap) app.route('/setting/skin_set', methods = ['POST', 'GET'])(main_setting_skin_set) app.route('/easter_egg')(main_func_easter_egg) def main_easter_egg_go(): with get_db_connect() as conn: lib = ctypes.cdll.LoadLibrary('./route_go/main_easter_egg.so') lib.Do.restype = ctypes.c_char_p return easy_minify(flask.render_template(skin_check(), imp = ['Easter Egg', wiki_set(), wiki_custom(), wiki_css([0, 0])], data = str(lib.Do(), 'utf-8'), menu = 0 )) app.route('/easter_egg_go')(main_easter_egg_go) # views -> view app.route('/view/')(main_view) app.route('/views/')(main_view) app.route('/image/')(main_view_image) # 조정 계획 중 app.route('/')(main_view_file) app.route('/shutdown', methods = ['POST', 'GET'])(main_sys_shutdown) app.route('/restart', methods = ['POST', 'GET'])(main_sys_restart) app.route('/update', methods = ['POST', 'GET'])(main_sys_update) app.errorhandler(404)(main_func_error_404) if __name__ == "__main__": waitress.serve( app, host = server_set['host'], port = int(server_set['port']), threads = 1, clear_untrusted_proxy_headers = True )