surplus-dev 4 年之前
父节点
当前提交
c64ca9cbc9

+ 13 - 11
app.py

@@ -668,10 +668,15 @@ def user_setting():
 def user_setting_email():
     return user_setting_email_2(load_db.db_get())
 
+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(load_db.db_get())
 
+app.route('/change/key')(user_setting_key)
+app.route('/change/key/delete')(user_setting_key_delete)
+
 @app.route('/change/pw', methods = ['POST', 'GET'])
 def user_setting_pw_change():
     return user_setting_pw_change_2(load_db.db_get())
@@ -740,14 +745,10 @@ def login_register_email_check():
 def login_register_submit():
     return login_register_submit_2(load_db.db_get())
 
-# 개편 필요
-@app.route('/pass_find', methods = ['POST', 'GET'])
-def login_pass_find():
-    return login_pass_find_2(load_db.db_get(), 'pass_find')
-
-@app.route('/pass_find/email', methods = ['POST', 'GET'])
-def login_pass_find_email():
-    return login_pass_find_email_2(load_db.db_get(), 'check_key')
+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')
 def login_logout():
@@ -838,8 +839,9 @@ app.route('/update', methods = ['POST', 'GET'])(main_sys_update)
 app.errorhandler(404)(main_error_404)
     
 if __name__ == "__main__":
-    do_server = netius.servers.WSGIServer(app = app)
-    do_server.serve(
+    waitress.serve(
+        app,
         host = server_set['host'],
-        port = int(server_set['port'])
+        port = int(server_set['port']),
+        threads = 1
     )

+ 4 - 0
lang/en-US.json

@@ -215,6 +215,10 @@
         "record_reset" : "User edit log reset",
         "today_doc" : "Today[s] document",
         "send_edit" : "Modify reason",
+        "password_instead_key" : "Authentication key",
+        "key_change" : "Change key",
+        "key_delete" : "Delete key",
+        "email_delete" : "Delete email",
         "_comment_2.1_" : "Filter",
             "_comment_2.1.1_" : "List",
                 "interwiki_list" : "Interwiki(s) list",

+ 5 - 1
lang/ko-KR.json

@@ -409,5 +409,9 @@
     "today_doc": "오늘의 문서",
     "send_edit": "편집 사유 수정",
     "document_filter_list": "문서명 필터 목록",
-    "document_filter_add": "문서명 필터 추가"
+    "document_filter_add": "문서명 필터 추가",
+    "password_instead_key": "대체 인증키",
+    "key_change": "키 변경",
+    "key_delete": "키 삭제",
+    "email_delete": "이메일 삭제"
 }

+ 0 - 0
route/filter_document_del.py → route/filter_document_delete.py


+ 0 - 0
route/filter_inter_wiki_del.py → route/filter_inter_wiki_delete.py


+ 13 - 0
route/login_find.py

@@ -0,0 +1,13 @@
+from .tool.func import *
+
+def login_find():
+    return easy_minify(flask.render_template(skin_check(),
+        imp = [load_lang('password_search'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
+        data = '''
+            <ul class="inside_ul">
+                <li><a href="/login/find/email">''' + load_lang('email') + '''</a></li>
+                <li><a href="/login/find/key">''' + load_lang('key') + '''</a></li>
+            </ul>
+        ''',
+        menu = [['user', load_lang('return')]]
+    ))

+ 116 - 0
route/login_find_email.py

@@ -0,0 +1,116 @@
+from .tool.func import *
+
+# 개편 필요
+def login_find_email(tool):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+        
+        if flask.request.method == 'POST':
+            re_set_list = ['c_id', 'c_pw', 'c_ans', 'c_que', 'c_key', 'c_type']
+        
+            if tool == 'email_change':
+                flask.session['c_key'] = load_random_key(32)
+                flask.session['c_id'] = ip_check()
+                flask.session['c_type'] = 'email_change'
+            elif tool == 'pass_find':
+                user_id = flask.request.form.get('id', '')
+                user_email = flask.request.form.get('email', '')
+        
+                flask.session['c_key'] = load_random_key(32)
+                flask.session['c_id'] = user_id
+                flask.session['c_type'] = 'pass_find'
+            else:
+                if not 'c_type' in flask.session:
+                    return redirect('/register')
+        
+            if tool != 'pass_find':
+                user_email = flask.request.form.get('email', '')
+                email_data = re.search(r'@([^@]+)$', user_email)
+                if email_data:
+                    curs.execute(db_change("select html from html_filter where html = ? and kind = 'email'"), [email_data.group(1)])
+                    if not curs.fetchall():
+                        for i in re_set_list:
+                            flask.session.pop(i, None)
+                        
+                        return redirect('/email_filter')
+                else:
+                    for i in re_set_list:
+                        flask.session.pop(i, None)
+                    
+                    return re_error('/error/36')
+        
+            curs.execute(db_change('select data from other where name = "email_title"'))
+            sql_d = curs.fetchall()
+            t_text = html.escape(sql_d[0][0]) if sql_d and sql_d[0][0] != '' else (wiki_set()[0] + ' key')
+        
+            curs.execute(db_change('select data from other where name = "email_text"'))
+            sql_d = curs.fetchall()
+            i_text = (html.escape(sql_d[0][0]) + '\n\nKey : ' + flask.session['c_key']) if sql_d and sql_d[0][0] != '' else ('Key : ' + flask.session['c_key'])
+            
+            if tool == 'pass_find':
+                curs.execute(db_change("select id from user_set where id = ? and name = 'email' and data = ?"), [user_id, user_email])
+                if not curs.fetchall():
+                    return re_error('/error/12')
+                    
+                if send_email(user_email, t_text, i_text) == 0:
+                    return re_error('/error/18')
+        
+                return redirect('/pass_find/email')
+            else:
+                curs.execute(db_change('select id from user_set where name = "email" and data = ?'), [user_email])
+                if curs.fetchall():
+                    for i in re_set_list:
+                        flask.session.pop(i, None)
+        
+                    return re_error('/error/35')
+                
+                if send_email(user_email, t_text, i_text) == 0:
+                    for i in re_set_list:
+                        flask.session.pop(i, None)
+        
+                    return re_error('/error/18')
+        
+                flask.session['c_email'] = user_email
+        
+                return redirect('/pass_find/email')
+        else:
+            if tool == 'pass_find':
+                curs.execute(db_change('select data from other where name = "password_search_text"'))
+                sql_d = curs.fetchall()
+                b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
+        
+                return easy_minify(flask.render_template(skin_check(),
+                    imp = [load_lang('password_search'), wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('email') + ')', 0])],
+                    data = b_text + '''
+                        <form method="post">
+                            <input placeholder="''' + load_lang('id') + '''" name="id" type="text">
+                            <hr class="main_hr">
+                            <input placeholder="''' + load_lang('email') + '''" name="email" type="text">
+                            <hr class="main_hr">
+                            <button type="submit">''' + load_lang('save') + '''</button>
+                        </form>
+                    ''',
+                    menu = [['user', load_lang('return')]]
+                ))
+            else:
+                if tool == 'need_email' and not 'c_type' in flask.session:
+                    return redirect('/register')
+        
+                curs.execute(db_change('select data from other where name = "email_insert_text"'))
+                sql_d = curs.fetchall()
+                b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
+        
+                return easy_minify(flask.render_template(skin_check(),
+                    imp = [load_lang('email'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
+                    data = '''
+                        <a href="/email_filter">(''' + load_lang('email_filter_list') + ''')</a>
+                        <hr class="main_hr">
+                        ''' + b_text + '''
+                        <form method="post">
+                            <input placeholder="''' + load_lang('email') + '''" name="email" type="text">
+                            <hr class="main_hr">
+                            <button type="submit">''' + load_lang('save') + '''</button>
+                        </form>
+                    ''',
+                    menu = [['user', load_lang('return')]]
+                ))

+ 172 - 0
route/login_find_email_check.py

@@ -0,0 +1,172 @@
+from .tool.func import *
+
+# 개편 필요
+def login_find_email_check(tool):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+        
+        if  flask.request.method == 'POST' or \
+            ('c_key' in flask.session and flask.session['c_key'] == 'email_pass'):
+            re_set_list = ['c_id', 'c_pw', 'c_ans', 'c_que', 'c_key', 'c_type', 'c_email']
+            ip = ip_check()
+            input_key = flask.request.form.get('key', '')
+            user_agent = flask.request.headers.get('User-Agent', '')
+        
+            if  'c_type' in flask.session and \
+                flask.session['c_type'] == 'pass_find' and \
+                flask.session['c_key'] == input_key:
+                curs.execute(db_change("update user_set set data = ? where name = 'pw' and id = ?"), [
+                    pw_encode(flask.session['c_key']), 
+                    flask.session['c_id']
+                ])
+                
+                curs.execute(db_change('select data from user_set where name = "2fa" and id = ?'), [user_id])
+                if curs.fetchall():
+                    curs.execute(db_change("update user_set set data = '' where name = '2fa' and id = ?"), [user_id])
+        
+                user_id = flask.session['c_id']
+                user_pw = flask.session['c_key']
+        
+                for i in re_set_list:
+                    flask.session.pop(i, None)
+        
+                curs.execute(db_change('select data from other where name = "reset_user_text"'))
+                sql_d = curs.fetchall()
+                b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
+
+                conn.commit()
+        
+                return easy_minify(flask.render_template(skin_check(),
+                    imp = [load_lang('reset_user_ok'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
+                    data = '' + \
+                        b_text + \
+                        load_lang('id') + ' : ' + user_id + \
+                        '<hr class="main_hr">' + \
+                        load_lang('password') + ' : ' + user_pw + \
+                    '',
+                    menu = [['user', load_lang('return')]]
+                ))
+            elif    'c_type' in flask.session and \
+                    (flask.session['c_key'] == input_key or flask.session['c_key'] == 'email_pass'):
+                curs.execute(db_change('select data from other where name = "encode"'))
+                db_data = curs.fetchall()
+        
+                if flask.session['c_type'] == 'register':
+                    if flask.session['c_key'] == 'email_pass':
+                        flask.session['c_email'] = ''
+        
+                    curs.execute(db_change("select id from user_set limit 1"))
+                    first = 1 if not curs.fetchall() else 0
+        
+                    curs.execute(db_change("select id from user_set where id = ?"), [
+                        flask.session['c_id']
+                    ])
+                    if curs.fetchall():
+                        for i in re_set_list:
+                            flask.session.pop(i, None)
+        
+                        return re_error('/error/6')
+                
+                    curs.execute(db_change("select id from user_set where id = ? and name = 'application'"), [
+                        flask.session['c_id']
+                    ])
+                    if curs.fetchall():
+                        for i in re_set_list:
+                            flask.session.pop(i, None)
+        
+                        return re_error('/error/6')
+        
+                    curs.execute(db_change(
+                        'select data from other where name = "requires_approval"'
+                    ))
+                    requires_approval = curs.fetchall()
+                    if requires_approval and requires_approval[0][0] == 'on':
+                        user_app_data = {}
+                        user_app_data['id'] = flask.session['c_id']
+                        user_app_data['pw'] = flask.session['c_pw']
+                        user_app_data['date'] = get_time()
+                        user_app_data['encode'] = db_data[0][0]
+                        user_app_data['question'] = flask.session['c_que']
+                        user_app_data['answer'] = flask.session['c_ans']
+                        user_app_data['ip'] = ip
+                        user_app_data['ua'] = user_agent
+                        user_app_data['email'] = flask.session['c_email']
+                        
+                        curs.execute(db_change(
+                            "insert into user_set (id, name, data) values (?, ?, ?)"
+                        ), [
+                            flask.session['c_id'],
+                            'application',
+                            json.dumps(user_app_data)
+                        ])
+                        conn.commit()
+        
+                        for i in re_set_list:
+                            flask.session.pop(i, None)
+        
+                        return redirect('/application_submitted')
+                    else:
+                        if first == 0:
+                            user_auth = 'user'
+                        else:
+                            user_auth = 'owner'
+                        
+                        curs.execute(db_change("insert into user_set (id, name, data) values (?, 'pw', ?)"), [
+                            flask.session['c_id'],
+                            flask.session['c_pw']
+                        ])
+                        curs.execute(db_change("insert into user_set (id, name, data) values (?, 'acl', ?)"), [
+                            flask.session['c_id'],
+                            user_auth
+                        ])
+                        curs.execute(db_change("insert into user_set (id, name, data) values (?, 'date', ?)"), [
+                            flask.session['c_id'],
+                            get_time()
+                        ])
+                        curs.execute(db_change("insert into user_set (id, name, data) values (?, 'encode', ?)"), [
+                            flask.session['c_id'],
+                            db_data[0][0]
+                        ])
+        
+                    curs.execute(db_change("insert into user_set (name, id, data) values ('email', ?, ?)"), [
+                        flask.session['c_id'],
+                        flask.session['c_email']
+                    ])
+                    ua_plus(flask.session['c_id'], ip, user_agent, get_time())
+        
+                    flask.session['id'] = flask.session['c_id']
+                    flask.session['head'] = ''
+        
+                    conn.commit()
+                else:
+                    curs.execute(db_change('delete from user_set where name = "email" and id = ?'), [ip])
+                    curs.execute(db_change('insert into user_set (name, id, data) values ("email", ?, ?)'), [ip, flask.session['c_email']])
+        
+                    first = 0
+        
+                for i in re_set_list:
+                    flask.session.pop(i, None)
+        
+                return redirect('/change') if first == 0 else redirect('/setting') 
+            else:
+                for i in re_set_list:
+                    flask.session.pop(i, None)
+        
+                return redirect('/user')
+        else:
+            curs.execute(db_change('select data from other where name = "check_key_text"'))
+            sql_d = curs.fetchall()
+            b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
+        
+            return easy_minify(flask.render_template(skin_check(),
+                imp = [load_lang('check_key'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
+                data = '''
+                    <form method="post">
+                        ''' + b_text + '''
+                        <input placeholder="''' + load_lang('key') + '''" name="key" type="password">
+                        <hr class="main_hr">
+                        <button type="submit">''' + load_lang('save') + '''</button>
+                    </form>
+                ''',
+                menu = [['user', load_lang('return')]]
+            ))

+ 56 - 0
route/login_find_key.py

@@ -0,0 +1,56 @@
+from .tool.func import *
+
+def login_find_key():
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+        if flask.request.method == 'POST':
+            if captcha_post(flask.request.form.get('g-recaptcha-response', flask.request.form.get('g-recaptcha', ''))) == 1:
+                return re_error('/error/13')
+            else:
+                captcha_post('', 0)
+            
+            input_key = flask.request.form.get('key', '')
+            curs.execute(db_change('select id from user_set where name = "random_key" and data = ?'), [input_key])
+            db_data = curs.fetchall()
+            if not db_data:
+                return redirect('/user')
+            else:
+                user_id = db_data[0][0]
+            
+            key = load_random_key(32)
+            curs.execute(db_change("update user_set set data = ? where name = 'pw' and id = ?"), [
+                pw_encode(key), 
+                user_id
+            ])
+            
+            curs.execute(db_change('select data from user_set where name = "2fa" and id = ?'), [user_id])
+            if curs.fetchall():
+                curs.execute(db_change("update user_set set data = '' where name = '2fa' and id = ?"), [user_id])
+            
+            curs.execute(db_change('select data from other where name = "reset_user_text"'))
+            sql_d = curs.fetchall()
+            b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
+            
+            return easy_minify(flask.render_template(skin_check(),
+                    imp = [load_lang('reset_user_ok'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
+                    data = '' + \
+                        b_text + \
+                        load_lang('id') + ' : ' + user_id + \
+                        '<hr class="main_hr">' + \
+                        load_lang('password') + ' : ' + key + \
+                    '',
+                    menu = [['user', load_lang('return')]]
+                ))
+        else:
+            return easy_minify(flask.render_template(skin_check(),
+                imp = [load_lang('password_search'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
+                data = '''
+                    <form method="post">
+                        <input placeholder="''' + load_lang('key') + '''" name="key" type="password">
+                        <hr class="main_hr">
+                        ''' + captcha_get() + '''
+                        <button type="submit">''' + load_lang('send') + '''</button>
+                    </form>
+                ''',
+                menu = [['user', load_lang('return')]]
+            ))

+ 2 - 2
route/login_login.py

@@ -57,9 +57,9 @@ def login_login_2(conn):
             data =  '''
                     <form method="post">
                         <input placeholder="''' + load_lang('id') + '''" name="id" type="text">
-                        <hr class=\"main_hr\">
+                        <hr class="main_hr">
                         <input placeholder="''' + load_lang('password') + '''" name="pw" type="password">
-                        <hr class=\"main_hr\">
+                        <hr class="main_hr">
                         ''' + captcha_get() + '''
                         <button type="submit">''' + load_lang('login') + '''</button>
                         ''' + http_warning() + '''

+ 0 - 115
route/login_pass_find.py

@@ -1,115 +0,0 @@
-from .tool.func import *
-
-# 개편 필요
-def login_pass_find_2(conn, tool):
-    curs = conn.cursor()
-    
-    if flask.request.method == 'POST':
-        re_set_list = ['c_id', 'c_pw', 'c_ans', 'c_que', 'c_key', 'c_type']
-    
-        if tool == 'email_change':
-            flask.session['c_key'] = load_random_key(32)
-            flask.session['c_id'] = ip_check()
-            flask.session['c_type'] = 'email_change'
-        elif tool == 'pass_find':
-            user_id = flask.request.form.get('id', '')
-            user_email = flask.request.form.get('email', '')
-
-            flask.session['c_key'] = load_random_key(32)
-            flask.session['c_id'] = user_id
-            flask.session['c_type'] = 'pass_find'
-        else:
-            if not 'c_type' in flask.session:
-                return redirect('/register')
-
-        if tool != 'pass_find':
-            user_email = flask.request.form.get('email', '')
-            email_data = re.search(r'@([^@]+)$', user_email)
-            if email_data:
-                curs.execute(db_change("select html from html_filter where html = ? and kind = 'email'"), [email_data.group(1)])
-                if not curs.fetchall():
-                    for i in re_set_list:
-                        flask.session.pop(i, None)
-                    
-                    return redirect('/email_filter')
-            else:
-                for i in re_set_list:
-                    flask.session.pop(i, None)
-                
-                return re_error('/error/36')
-
-        curs.execute(db_change('select data from other where name = "email_title"'))
-        sql_d = curs.fetchall()
-        t_text = html.escape(sql_d[0][0]) if sql_d and sql_d[0][0] != '' else (wiki_set()[0] + ' key')
-
-        curs.execute(db_change('select data from other where name = "email_text"'))
-        sql_d = curs.fetchall()
-        i_text = (html.escape(sql_d[0][0]) + '\n\nKey : ' + flask.session['c_key']) if sql_d and sql_d[0][0] != '' else ('Key : ' + flask.session['c_key'])
-        
-        if tool == 'pass_find':
-            curs.execute(db_change("select id from user_set where id = ? and name = 'email' and data = ?"), [user_id, user_email])
-            if not curs.fetchall():
-                return re_error('/error/12')
-                
-            if send_email(user_email, t_text, i_text) == 0:
-                return re_error('/error/18')
-
-            return redirect('/pass_find/email')
-        else:
-            curs.execute(db_change('select id from user_set where name = "email" and data = ?'), [user_email])
-            if curs.fetchall():
-                for i in re_set_list:
-                    flask.session.pop(i, None)
-
-                return re_error('/error/35')
-            
-            if send_email(user_email, t_text, i_text) == 0:
-                for i in re_set_list:
-                    flask.session.pop(i, None)
-
-                return re_error('/error/18')
-
-            flask.session['c_email'] = user_email
-
-            return redirect('/pass_find/email')
-    else:
-        if tool == 'pass_find':
-            curs.execute(db_change('select data from other where name = "password_search_text"'))
-            sql_d = curs.fetchall()
-            b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
-
-            return easy_minify(flask.render_template(skin_check(),
-                imp = [load_lang('password_search'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
-                data = b_text + '''
-                    <form method="post">
-                        <input placeholder="''' + load_lang('id') + '''" name="id" type="text">
-                        <hr class="main_hr">
-                        <input placeholder="''' + load_lang('email') + '''" name="email" type="text">
-                        <hr class="main_hr">
-                        <button type="submit">''' + load_lang('save') + '''</button>
-                    </form>
-                ''',
-                menu = [['user', load_lang('return')]]
-            ))
-        else:
-            if tool == 'need_email' and not 'c_type' in flask.session:
-                return redirect('/register')
-
-            curs.execute(db_change('select data from other where name = "email_insert_text"'))
-            sql_d = curs.fetchall()
-            b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
-
-            return easy_minify(flask.render_template(skin_check(),
-                imp = [load_lang('email'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
-                data = '''
-                    <a href="/email_filter">(''' + load_lang('email_filter_list') + ''')</a>
-                    <hr class="main_hr">
-                    ''' + b_text + '''
-                    <form method="post">
-                        <input placeholder="''' + load_lang('email') + '''" name="email" type="text">
-                        <hr class="main_hr">
-                        <button type="submit">''' + load_lang('save') + '''</button>
-                    </form>
-                ''',
-                menu = [['user', load_lang('return')]]
-            ))

+ 0 - 164
route/login_pass_find_email.py

@@ -1,164 +0,0 @@
-from .tool.func import *
-
-def login_pass_find_email_2(conn, tool):
-    curs = conn.cursor()
-
-    if  flask.request.method == 'POST' or \
-        ('c_key' in flask.session and flask.session['c_key'] == 'email_pass'):
-        re_set_list = ['c_id', 'c_pw', 'c_ans', 'c_que', 'c_key', 'c_type', 'c_email']
-        ip = ip_check()
-        input_key = flask.request.form.get('key', '')
-        user_agent = flask.request.headers.get('User-Agent', '')
-
-        if  'c_type' in flask.session and \
-            flask.session['c_type'] == 'pass_find' and \
-            flask.session['c_key'] == input_key:
-            curs.execute(db_change("update user_set set data = ? where name = 'pw' and id = ?"), [
-                pw_encode(flask.session['c_key']), 
-                flask.session['c_id']
-            ])
-            conn.commit()
-
-            user_id = flask.session['c_id']
-            user_pw = flask.session['c_key']
-
-            for i in re_set_list:
-                flask.session.pop(i, None)
-
-            curs.execute(db_change('select data from other where name = "reset_user_text"'))
-            sql_d = curs.fetchall()
-            b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
-
-            curs.execute(db_change('select data from user_set where name = "2fa" and id = ?'), [user_id])
-            if curs.fetchall():
-                curs.execute(db_change("update user_set set data = '' where name = '2fa' and id = ?"), [user_id])
-
-            return easy_minify(flask.render_template(skin_check(),
-                imp = [load_lang('reset_user_ok'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
-                data = b_text + load_lang('id') + ' : ' + user_id + '<br>' + load_lang('password') + ' : ' + user_pw,
-                menu = [['user', load_lang('return')]]
-            ))
-        elif    'c_type' in flask.session and \
-                (flask.session['c_key'] == input_key or flask.session['c_key'] == 'email_pass'):
-            curs.execute(db_change('select data from other where name = "encode"'))
-            db_data = curs.fetchall()
-
-            if flask.session['c_type'] == 'register':
-                if flask.session['c_key'] == 'email_pass':
-                    flask.session['c_email'] = ''
-
-                curs.execute(db_change("select id from user_set limit 1"))
-                first = 1 if not curs.fetchall() else 0
-
-                curs.execute(db_change("select id from user_set where id = ?"), [
-                    flask.session['c_id']
-                ])
-                if curs.fetchall():
-                    for i in re_set_list:
-                        flask.session.pop(i, None)
-
-                    return re_error('/error/6')
-            
-                curs.execute(db_change("select id from user_set where id = ? and name = 'application'"), [
-                    flask.session['c_id']
-                ])
-                if curs.fetchall():
-                    for i in re_set_list:
-                        flask.session.pop(i, None)
-
-                    return re_error('/error/6')
-
-                curs.execute(db_change(
-                    'select data from other where name = "requires_approval"'
-                ))
-                requires_approval = curs.fetchall()
-                if requires_approval and requires_approval[0][0] == 'on':
-                    user_app_data = {}
-                    user_app_data['id'] = flask.session['c_id']
-                    user_app_data['pw'] = flask.session['c_pw']
-                    user_app_data['date'] = get_time()
-                    user_app_data['encode'] = db_data[0][0]
-                    user_app_data['question'] = flask.session['c_que']
-                    user_app_data['answer'] = flask.session['c_ans']
-                    user_app_data['ip'] = ip
-                    user_app_data['ua'] = user_agent
-                    user_app_data['email'] = flask.session['c_email']
-                    
-                    curs.execute(db_change(
-                        "insert into user_set (id, name, data) values (?, ?, ?)"
-                    ), [
-                        flask.session['c_id'],
-                        'application',
-                        json.dumps(user_app_data)
-                    ])
-                    conn.commit()
-    
-                    for i in re_set_list:
-                        flask.session.pop(i, None)
-
-                    return redirect('/application_submitted')
-                else:
-                    if first == 0:
-                        user_auth = 'user'
-                    else:
-                        user_auth = 'owner'
-                    
-                    curs.execute(db_change("insert into user_set (id, name, data) values (?, 'pw', ?)"), [
-                        flask.session['c_id'],
-                        flask.session['c_pw']
-                    ])
-                    curs.execute(db_change("insert into user_set (id, name, data) values (?, 'acl', ?)"), [
-                        flask.session['c_id'],
-                        user_auth
-                    ])
-                    curs.execute(db_change("insert into user_set (id, name, data) values (?, 'date', ?)"), [
-                        flask.session['c_id'],
-                        get_time()
-                    ])
-                    curs.execute(db_change("insert into user_set (id, name, data) values (?, 'encode', ?)"), [
-                        flask.session['c_id'],
-                        db_data[0][0]
-                    ])
-
-                curs.execute(db_change("insert into user_set (name, id, data) values ('email', ?, ?)"), [
-                    flask.session['c_id'],
-                    flask.session['c_email']
-                ])
-                ua_plus(flask.session['c_id'], ip, user_agent, get_time())
-
-                flask.session['id'] = flask.session['c_id']
-                flask.session['head'] = ''
-
-                conn.commit()
-            else:
-                curs.execute(db_change('delete from user_set where name = "email" and id = ?'), [ip])
-                curs.execute(db_change('insert into user_set (name, id, data) values ("email", ?, ?)'), [ip, flask.session['c_email']])
-
-                first = 0
-
-            for i in re_set_list:
-                flask.session.pop(i, None)
-
-            return redirect('/change') if first == 0 else redirect('/setting') 
-        else:
-            for i in re_set_list:
-                flask.session.pop(i, None)
-
-            return redirect('/user')
-    else:
-        curs.execute(db_change('select data from other where name = "check_key_text"'))
-        sql_d = curs.fetchall()
-        b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
-
-        return easy_minify(flask.render_template(skin_check(),
-            imp = [load_lang('check_key'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
-            data = '''
-                <form method="post">
-                    ''' + b_text + '''
-                    <input placeholder="''' + load_lang('key') + '''" name="key" type="text">
-                    <hr class="main_hr">
-                    <button type="submit">''' + load_lang('save') + '''</button>
-                </form>
-            ''',
-            menu = [['user', load_lang('return')]]
-        ))

+ 1 - 1
route/main_tool_admin.py

@@ -52,7 +52,7 @@ def main_tool_admin(num = 1, add_2 = ''):
                         <li><a href="/name_filter">''' + load_lang('id_filter_list') + '''</a></li>
                         <li><a href="/file_filter">''' + load_lang('file_filter_list') + '''</a></li>
                         <li><a href="/extension_filter">''' + load_lang('extension_filter_list') + '''</a></li>
-                        <li><a href="/filter/document/list">''' + load_lang('doc_filter_list') + '''</a></li>
+                        <li><a href="/filter/document/list">''' + load_lang('document_filter_list') + '''</a></li>
                     </ul>
                     <h3>2.2. ''' + load_lang('server') + '''</h2>
                     <ul class="inside_ul">

+ 2 - 1
route/tool/func.py

@@ -65,6 +65,7 @@ from .func_mark import *
 from diff_match_patch import diff_match_patch
 
 import netius.servers
+import waitress
 
 import werkzeug.routing
 import werkzeug.debug
@@ -464,7 +465,7 @@ def set_init():
 def get_default_admin_group():
     return ['owner', 'ban']
 
-def load_random_key(long = 64):
+def load_random_key(long = 128):
     return ''.join(
         random.choice(
             "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

+ 1 - 1
route/user_info.py

@@ -33,7 +33,7 @@ def user_info_2(conn, name):
                 <li><a href="/login">''' + load_lang('login') + '''</a></li>
                 <li><a href="/register">''' + load_lang('register') + '''</a></li>
                 <li><a href="/change">''' + load_lang('user_setting') + '''</a></li>
-                <li><a href="/pass_find">''' + load_lang('password_search') + '''</a></li>
+                <li><a href="/login/find">''' + load_lang('password_search') + '''</a></li>
             '''
             
         tool_menu += '<li><a href="/change/head">' + load_lang('user_head') + '</a></li>'

+ 8 - 2
route/user_setting.py

@@ -44,7 +44,11 @@ def user_setting_2(conn, server_set_var):
         else:
             curs.execute(db_change('select data from user_set where name = "email" and id = ?'), [ip])
             data = curs.fetchall()
-            email = data[0][0] if data else '-'
+            email = data[0][0] if data and data[0][0] != '' else '-'
+            
+            curs.execute(db_change('select data from user_set where name = "random_key" and id = ?'), [ip])
+            data = curs.fetchall()
+            ramdom_key = data[0][0] if data and data[0][0] != '' else '-'
 
             curs.execute(db_change('select data from user_set where name = "skin" and id = ?'), [ip])
             data = curs.fetchall()
@@ -87,7 +91,9 @@ def user_setting_2(conn, server_set_var):
                         <hr class="main_hr">
                         <a href="/change/pw">(''' + load_lang('password_change') + ''')</a>
                         <hr class="main_hr">
-                        <span>''' + load_lang('email') + ''' : ''' + email + '''</span> <a href="/change/email">(''' + load_lang('email_change') + ''')</a>
+                        <span>''' + load_lang('email') + ''' : ''' + email + '''</span> <a href="/change/email">(''' + load_lang('email_change') + ''')</a> <a href="/change/email/delete">(''' + load_lang('email_delete') + ''')</a>
+                        <hr class="main_hr">
+                        <span>''' + load_lang('password_instead_key') + ''' : ''' + ramdom_key + ''' <a href="/change/key">(''' + load_lang('key_change') + ''')</a> <a href="/change/key/delete">(''' + load_lang('key_delete') + ''')</a></span>
                         <h2>''' + load_lang('main') + '''</h2>
                         <span>''' + load_lang('skin') + '''</span>
                         <hr class="main_hr">

+ 12 - 0
route/user_setting_email_delete.py

@@ -0,0 +1,12 @@
+from .tool.func import *
+
+def user_setting_email_delete():
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+
+        ip = ip_check()
+        if ip_or_user(ip) == 0:
+            curs.execute(db_change("delete from user_set where name = 'email' and id = ?"), [ip])
+            conn.commit()
+    
+        return redirect('/change')

+ 19 - 0
route/user_setting_key.py

@@ -0,0 +1,19 @@
+from .tool.func import *
+
+def user_setting_key():
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+
+        ip = ip_check()
+        if ip_or_user(ip) == 0:
+            while 1:
+                key = load_random_key()
+                curs.execute(db_change('select data from user_set where name = "random_key" and data = ?'), [key])
+                if not curs.fetchall():
+                    break
+
+            curs.execute(db_change("delete from user_set where name = 'random_key' and id = ?"), [ip])
+            curs.execute(db_change("insert into user_set (name, id, data) values ('random_key', ?, ?)"), [ip, key])
+            conn.commit()
+
+        return redirect('/change')

+ 12 - 0
route/user_setting_key_delete.py

@@ -0,0 +1,12 @@
+from .tool.func import *
+
+def user_setting_key_delete():
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+
+        ip = ip_check()
+        if ip_or_user(ip) == 0:
+            curs.execute(db_change("delete from user_set where name = 'random_key' and id = ?"), [ip])
+            conn.commit()
+    
+        return redirect('/change')