Bladeren bron

Merge pull request #1328 from openNAMU/dev

Dev
잉여개발기 (SPDV) 4 jaren geleden
bovenliggende
commit
7e97fac6b7

+ 25 - 18
app.py

@@ -388,9 +388,7 @@ app.route('/extension_filter/add', methods = ['POST', 'GET'], defaults = { 'tool
 
 # Func-list
 # /list/document/old
-@app.route('/old_page')
-def list_old_page():
-    return list_old_page_2(load_db.db_get())
+app.route('/old_page')(list_old_page)
 
 # /list/document/acl
 @app.route('/acl_list')
@@ -588,11 +586,11 @@ def view_read(name = 'Test', doc_rev = 0, doc_from = ''):
 def edit_revert(name = None):
     return edit_revert_2(load_db.db_get(), name)
 
-@app.route('/edit/<everything:name>', methods = ['POST', 'GET'])
-@app.route('/edit/<everything:name>/doc_section/<int:section>', methods = ['POST', 'GET'])
-def edit(name = 'Test', section = 0):
-    return edit_2(load_db.db_get(), name, section)
+app.route('/edit/<everything:name>', methods = ['POST', 'GET'])(edit)
+app.route('/edit/<everything:name>/doc_from/<everything:name_load>', methods = ['POST', 'GET'])(edit)
+app.route('/edit/<everything:name>/doc_section/<int:section>', methods = ['POST', 'GET'])(edit)
 
+# 개편 예정
 @app.route('/backlink_reset/<everything:name>')
 def edit_backlink_reset(name = 'Test'):
     return edit_backlink_reset_2(load_db.db_get(), name)
@@ -670,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())
@@ -742,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():
@@ -788,23 +787,30 @@ app.route('/api/w/<everything:name>/doc_tool/<tool>/doc_rev/<int(signed = True):
 app.route('/api/w/<everything:name>/doc_tool/<tool>', methods = ['GET', 'POST'])(api_w)
 app.route('/api/w/<everything:name>', methods = ['GET', 'POST'])(api_w)
 app.route('/api/raw/<everything:name>')(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/<name>')(api_skin_info)
 app.route('/api/markup')(api_markup)
 app.route('/api/user_info/<name>')(api_user_info)
+app.route('/api/setting/<name>')(api_setting)
+
 app.route('/api/thread/<int:topic_num>/<tool>/<int:num>')(api_topic_sub)
 app.route('/api/thread/<int:topic_num>/<tool>')(api_topic_sub)
 app.route('/api/thread/<int:topic_num>')(api_topic_sub)
+
 app.route('/api/search/<everything:name>/doc_num/<int:num>/<int:page>')(api_search)
 app.route('/api/search/<everything:name>')(api_search)
+
 app.route('/api/recent_change/<int:num>')(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/<get_type>/<int:num>')(api_recent_discuss)
 app.route('/api/recent_discuss/<int:num>')(api_recent_discuss)
 app.route('/api/recent_discuss')(api_recent_discuss)
+
 app.route('/api/sha224/<everything:data>', methods = ['POST', 'GET'])(api_sha224)
 app.route('/api/title_index')(api_title_index)
 app.route('/api/image/<everything:name>', methods = ['POST', 'GET'])(api_image_view)
@@ -840,8 +846,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": "이메일 삭제"
 }

+ 21 - 0
route/api_setting.py

@@ -0,0 +1,21 @@
+from .tool.func import *
+
+def api_setting(name = 'markup'):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+        
+        ok_list_1 = ['markup']
+        ok_list_2 = ['inter_wiki']
+        
+        if name in ok_list_1:
+            curs.execute(db_change('select data from other where name = ?'), [name])
+            rep_data = curs.fetchall()
+            if rep_data:
+                return flask.jsonify({ name : rep_data })
+        elif name in ok_list_2:
+            curs.execute(db_change("select html, plus, plus_t from html_filter where kind = ?"), [name])
+            rep_data = curs.fetchall()
+            if rep_data:
+                return flask.jsonify({ name : rep_data })
+
+        return flask.jsonify({})

+ 221 - 218
route/edit.py

@@ -1,236 +1,239 @@
 from .tool.func import *
 
-def edit_2(conn, name, section):
-    curs = conn.cursor()
-
-    ip = ip_check()
-    if acl_check(name) == 1:
-        return re_error('/ban')
-    
-    curs.execute(db_change("select id from history where title = ? order by id + 0 desc"), [name])
-    doc_ver = curs.fetchall()
-    doc_ver = doc_ver[0][0] if doc_ver else '0'
-    
-    section = '' if section == 0 else section
-    post_ver = flask.request.form.get('ver', '')
-    if flask.request.method == 'POST':
-        edit_repeat = 'error' if post_ver != doc_ver else 'post'
-    else:
-        edit_repeat = 'get'
+def edit(name = 'Test', name_load = 0, section = 0):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
     
-    if edit_repeat == '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)
-
-        if slow_edit_check() == 1:
-            return re_error('/error/24')
-
-        today = get_time()
-        content = flask.request.form.get('content', '').replace('\r\n', '\n')
+        ip = ip_check()
+        if acl_check(name) == 1:
+            return re_error('/ban')
         
-        if edit_filter_do(content) == 1:
-            return re_error('/error/21')
-            
-        curs.execute(db_change('select data from other where name = "copyright_checkbox_text"'))
-        copyright_checkbox_text_d = curs.fetchall()
-        if copyright_checkbox_text_d and copyright_checkbox_text_d[0][0] != '' and flask.request.form.get('copyright_agreement', '') != 'yes':
-            return re_error('/error/29')
+        curs.execute(db_change("select id from history where title = ? order by id + 0 desc"), [name])
+        doc_ver = curs.fetchall()
+        doc_ver = doc_ver[0][0] if doc_ver else '0'
         
-        curs.execute(db_change("select data from data where title = ?"), [name])
-        old = curs.fetchall()
-        if old:  
-            o_data = old[0][0].replace('\r\n', '\n')
-
-            leng = leng_check(len(o_data), len(content))
-            
-            curs.execute(db_change("update data set data = ? where title = ?"), [content, name])
+        section = '' if section == 0 else section
+        post_ver = flask.request.form.get('ver', '')
+        if flask.request.method == 'POST':
+            edit_repeat = 'error' if post_ver != doc_ver else 'post'
         else:
-            leng = '+' + str(len(content))
-
-            curs.execute(db_change("insert into data (title, data) values (?, ?)"), [name, content])
-
-            curs.execute(db_change('select data from other where name = "count_all_title"'))
-            curs.execute(db_change("update other set data = ? where name = 'count_all_title'"), [str(int(curs.fetchall()[0][0]) + 1)])
-
-        curs.execute(db_change("select user from scan where title = ? and type = ''"), [name])
-        for scan_user in curs.fetchall():
-            add_alarm(scan_user[0], ip + ' | <a href="/w/' + url_pas(name) + '">' + name + '</a> | Edit')
-                
-        history_plus(
-            name,
-            content,
-            today,
-            ip,
-            flask.request.form.get('send', ''),
-            leng
-        )
-        
-        curs.execute(db_change("delete from back where link = ?"), [name])
-        curs.execute(db_change("delete from back where title = ? and type = 'no'"), [name])
-        
-        render_set(
-            doc_name = name,
-            doc_data = content,
-            data_type = 'backlink'
-        )
-        
-        conn.commit()
-        
-        section = (('#edit_load_' + str(section)) if section != '' else '')
+            edit_repeat = 'get'
         
-        return redirect('/w/' + url_pas(name) + section)
-    else:
-        editor_top_text = ''
-        if edit_repeat == 'get':
-            load_title = flask.request.args.get('plus', '')
-            if load_title == '':
-                load_title = name
-                editor_top_text += '<a href="/manager/15?plus=' + url_pas(name) + '">(' + load_lang('load') + ')</a> '
+        if edit_repeat == '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)
+    
+            if slow_edit_check() == 1:
+                return re_error('/error/24')
+    
+            today = get_time()
+            content = flask.request.form.get('content', '').replace('\r\n', '\n')
+            
+            if edit_filter_do(content) == 1:
+                return re_error('/error/21')
                 
-            curs.execute(db_change("select data from data where title = ?"), [load_title])
-            sql_d = curs.fetchall()
-            data = sql_d[0][0] if sql_d else ''
-            data = data.replace('\r\n', '\n')
+            curs.execute(db_change('select data from other where name = "copyright_checkbox_text"'))
+            copyright_checkbox_text_d = curs.fetchall()
+            if copyright_checkbox_text_d and copyright_checkbox_text_d[0][0] != '' and flask.request.form.get('copyright_agreement', '') != 'yes':
+                return re_error('/error/29')
+            
+            curs.execute(db_change("select data from data where title = ?"), [name])
+            old = curs.fetchall()
+            if old:  
+                o_data = old[0][0].replace('\r\n', '\n')
+    
+                leng = leng_check(len(o_data), len(content))
+                
+                curs.execute(db_change("update data set data = ? where title = ?"), [content, name])
+            else:
+                leng = '+' + str(len(content))
+    
+                curs.execute(db_change("insert into data (title, data) values (?, ?)"), [name, content])
+    
+                curs.execute(db_change('select data from other where name = "count_all_title"'))
+                curs.execute(db_change("update other set data = ? where name = 'count_all_title'"), [str(int(curs.fetchall()[0][0]) + 1)])
+    
+            curs.execute(db_change("select user from scan where title = ? and type = ''"), [name])
+            for scan_user in curs.fetchall():
+                add_alarm(scan_user[0], ip + ' | <a href="/w/' + url_pas(name) + '">' + name + '</a> | Edit')
                     
+            history_plus(
+                name,
+                content,
+                today,
+                ip,
+                flask.request.form.get('send', ''),
+                leng
+            )
+            
+            curs.execute(db_change("delete from back where link = ?"), [name])
+            curs.execute(db_change("delete from back where title = ? and type = 'no'"), [name])
+            
+            render_set(
+                doc_name = name,
+                doc_data = content,
+                data_type = 'backlink'
+            )
+            
+            conn.commit()
+            
+            section = (('#edit_load_' + str(section)) if section != '' else '')
+            
+            return redirect('/w/' + url_pas(name) + section)
         else:
-            data = flask.request.form.get('content', '')
-            warning_edit = load_lang('exp_edit_conflict') + ' '
-
-            if flask.request.form.get('ver', '0') == '0':
-                warning_edit += '<a href="/raw/' + url_pas(name) + '">(r' + doc_ver + ')</a>'
+            editor_top_text = ''
+            if edit_repeat == 'get':
+                load_title = name_load
+                print(load_title, section)
+                if load_title == 0 and section == '':
+                    load_title = name
+                    editor_top_text += '<a href="/manager/15/' + url_pas(name) + '">(' + load_lang('load') + ')</a> '
+                elif section != '':
+                    load_title = name
+                    
+                curs.execute(db_change("select data from data where title = ?"), [load_title])
+                sql_d = curs.fetchall()
+                data = sql_d[0][0] if sql_d else ''
+                data = data.replace('\r\n', '\n')
             else:
-                warning_edit += '' + \
-                    '<a href="/diff/' + flask.request.form.get('ver', '1') + '/' + doc_ver + '/' + url_pas(name) + '">' + \
-                        '(r' + doc_ver + ')' + \
-                    '</a>' + \
-                ''
-
-            warning_edit += '<hr class="main_hr">'
-            editor_top_text = warning_edit + editor_top_text
-
-        editor_top_text += '' + \
-            '<a href="/edit_filter">(' + load_lang('edit_filter_rule') + ')</a>' + \
-            '<hr class="main_hr">' + \
-        ''
-
-        curs.execute(db_change('select data from other where name = "edit_bottom_text"'))
-        sql_d = curs.fetchall()
-        b_text = ('<hr class="main_hr">' + sql_d[0][0]) if sql_d and sql_d[0][0] != '' else ''
-        
-        curs.execute(db_change('select data from other where name = "copyright_checkbox_text"'))
-        sql_d = curs.fetchall()
-        if sql_d and sql_d[0][0] != '':
-            cccb_text = '' + \
-                '<hr class="main_hr">' + \
-                '<input type="checkbox" name="copyright_agreement" value="yes"> ' + sql_d[0][0] + \
+                data = flask.request.form.get('content', '')
+                warning_edit = load_lang('exp_edit_conflict') + ' '
+    
+                if flask.request.form.get('ver', '0') == '0':
+                    warning_edit += '<a href="/raw/' + url_pas(name) + '">(r' + doc_ver + ')</a>'
+                else:
+                    warning_edit += '' + \
+                        '<a href="/diff/' + flask.request.form.get('ver', '1') + '/' + doc_ver + '/' + url_pas(name) + '">' + \
+                            '(r' + doc_ver + ')' + \
+                        '</a>' + \
+                    ''
+    
+                warning_edit += '<hr class="main_hr">'
+                editor_top_text = warning_edit + editor_top_text
+    
+            editor_top_text += '' + \
+                '<a href="/edit_filter">(' + load_lang('edit_filter_rule') + ')</a>' + \
                 '<hr class="main_hr">' + \
             ''
-        else:
-            cccb_text = ''
-
-        curs.execute(db_change('select data from other where name = "edit_help"'))
-        sql_d = curs.fetchall()
-        p_text = html.escape(sql_d[0][0]) if sql_d and sql_d[0][0] != '' else load_lang('default_edit_help')
-
-        data = re.sub(r'\n+$', '', data)
-
-        monaco_on = flask.request.cookies.get('main_css_monaco', '0')
-        if monaco_on == '1':
-            editor_display = 'style="display: none;"'
-            monaco_display = ''
-            add_get_file = '''
-                <link   rel="stylesheet"
-                        data-name="vs/editor/editor.main" 
-                        href="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min/vs/editor/editor.main.min.css">
-                <script src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min/vs/loader.min.js"></script>
-            '''
+    
+            curs.execute(db_change('select data from other where name = "edit_bottom_text"'))
+            sql_d = curs.fetchall()
+            b_text = ('<hr class="main_hr">' + sql_d[0][0]) if sql_d and sql_d[0][0] != '' else ''
             
-            if flask.request.cookies.get('main_css_darkmode', '0') == '1':
-                monaco_thema = 'vs-dark'
+            curs.execute(db_change('select data from other where name = "copyright_checkbox_text"'))
+            sql_d = curs.fetchall()
+            if sql_d and sql_d[0][0] != '':
+                cccb_text = '' + \
+                    '<hr class="main_hr">' + \
+                    '<input type="checkbox" name="copyright_agreement" value="yes"> ' + sql_d[0][0] + \
+                    '<hr class="main_hr">' + \
+                ''
             else:
-                monaco_thema = ''
-            
-            add_script = '''
-                require.config({ paths: { 'vs': 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min/vs' }});
-                require(["vs/editor/editor.main"], function () {
-                    window.editor = monaco.editor.create(document.getElementById('monaco_editor'), {
-                        value: document.getElementById('textarea_edit_view').value,
-                        language: 'plaintext',
-                        theme: \'''' + monaco_thema + '''\'
+                cccb_text = ''
+    
+            curs.execute(db_change('select data from other where name = "edit_help"'))
+            sql_d = curs.fetchall()
+            p_text = html.escape(sql_d[0][0]) if sql_d and sql_d[0][0] != '' else load_lang('default_edit_help')
+    
+            data = re.sub(r'\n+$', '', data)
+    
+            monaco_on = flask.request.cookies.get('main_css_monaco', '0')
+            if monaco_on == '1':
+                editor_display = 'style="display: none;"'
+                monaco_display = ''
+                add_get_file = '''
+                    <link   rel="stylesheet"
+                            data-name="vs/editor/editor.main" 
+                            href="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min/vs/editor/editor.main.min.css">
+                    <script src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min/vs/loader.min.js"></script>
+                '''
+                
+                if flask.request.cookies.get('main_css_darkmode', '0') == '1':
+                    monaco_thema = 'vs-dark'
+                else:
+                    monaco_thema = ''
+                
+                add_script = '''
+                    require.config({ paths: { 'vs': 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min/vs' }});
+                    require(["vs/editor/editor.main"], function () {
+                        window.editor = monaco.editor.create(document.getElementById('monaco_editor'), {
+                            value: document.getElementById('textarea_edit_view').value,
+                            language: 'plaintext',
+                            theme: \'''' + monaco_thema + '''\'
+                        });
                     });
-                });
-            '''
-        else:
-            editor_display = ''
-            monaco_display = 'style="display: none;"'
-            add_get_file = ''
-            add_script = ''
+                '''
+            else:
+                editor_display = ''
+                monaco_display = 'style="display: none;"'
+                add_get_file = ''
+                add_script = ''
+                
+            curs.execute(db_change("select data from other where name = 'markup'"))
+            markup = curs.fetchall()[0][0]
             
-        curs.execute(db_change("select data from other where name = 'markup'"))
-        markup = curs.fetchall()[0][0]
-        
-        server_set = {
-            'section' : section,
-            'markup' : markup
-         }
-
-        return easy_minify(flask.render_template(skin_check(), 
-            imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('edit') + ')', 0])],
-            data =  editor_top_text + add_get_file + '''
-                <span   id="server_set"
-                        style="display: none;">''' + json.dumps(server_set) + '''</span>
-                <form method="post">
-                    <div>''' + edit_button(monaco_on) + '''</div>
-                    <div    id="monaco_editor"
-                            class="content" 
-                            ''' + monaco_display + '''></div>
-                    <textarea   id="textarea_edit_view"
-                                ''' + editor_display + '''
-                                class="content"
-                                placeholder="''' + p_text + '''">''' + html.escape(data) + '''</textarea>
-                    <hr class="main_hr">
-                    <input  placeholder="''' + load_lang('why') + '''" 
-                            name="send">
-                    <textarea   style="display: none;" 
-                                id="origin">''' + html.escape(data) + '''</textarea>
-                    <textarea   style="display: none;"
-                                name="content"
-                                id="content"></textarea>
-                    <input  style="display: none;" 
-                            name="ver" 
-                            value="''' + doc_ver + '''">
+            server_set = {
+                'section' : section,
+                'markup' : markup
+             }
+    
+            return easy_minify(flask.render_template(skin_check(), 
+                imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('edit') + ')', 0])],
+                data =  editor_top_text + add_get_file + '''
+                    <span   id="server_set"
+                            style="display: none;">''' + json.dumps(server_set) + '''</span>
+                    <form method="post">
+                        <div>''' + edit_button(monaco_on) + '''</div>
+                        <div    id="monaco_editor"
+                                class="content" 
+                                ''' + monaco_display + '''></div>
+                        <textarea   id="textarea_edit_view"
+                                    ''' + editor_display + '''
+                                    class="content"
+                                    placeholder="''' + p_text + '''">''' + html.escape(data) + '''</textarea>
+                        <hr class="main_hr">
+                        <input  placeholder="''' + load_lang('why') + '''" 
+                                name="send">
+                        <textarea   style="display: none;" 
+                                    id="origin">''' + html.escape(data) + '''</textarea>
+                        <textarea   style="display: none;"
+                                    name="content"
+                                    id="content"></textarea>
+                        <input  style="display: none;" 
+                                name="ver" 
+                                value="''' + doc_ver + '''">
+                        <hr class="main_hr">
+                        ''' + captcha_get() + ip_warning() + cccb_text + '''
+                        <button id="save"
+                                type="submit" 
+                                onclick="
+                                    monaco_to_content(); 
+                                    save_stop_exit();
+                                    section_edit_do();
+                                ">''' + load_lang('save') + '''</button>
+                        <button id="preview" 
+                                type="button" 
+                                onclick="
+                                    monaco_to_content();
+                                    load_preview(\'''' + url_pas(name) + '''\');
+                                ">''' + load_lang('preview') + '''</button>
+                    </form>
+                    ''' + b_text + '''
                     <hr class="main_hr">
-                    ''' + captcha_get() + ip_warning() + cccb_text + '''
-                    <button id="save"
-                            type="submit" 
-                            onclick="
-                                monaco_to_content(); 
-                                save_stop_exit();
-                                section_edit_do();
-                            ">''' + load_lang('save') + '''</button>
-                    <button id="preview" 
-                            type="button" 
-                            onclick="
-                                monaco_to_content();
-                                load_preview(\'''' + url_pas(name) + '''\');
-                            ">''' + load_lang('preview') + '''</button>
-                </form>
-                ''' + b_text + '''
-                <hr class="main_hr">
-                <div id="see_preview"></div>
-                <script>
-                    section_edit_init();
-                    do_paste_image();
-                    do_not_out();
-                    ''' + add_script + '''
-                </script>
-            ''',
-            menu = [
-                ['w/' + url_pas(name), load_lang('return')],
-                ['delete/' + url_pas(name), load_lang('delete')], 
-                ['move/' + url_pas(name), load_lang('move')], 
-                ['upload', load_lang('upload')]
-            ]
-        ))
+                    <div id="see_preview"></div>
+                    <script>
+                        section_edit_init();
+                        do_paste_image();
+                        do_not_out();
+                        ''' + add_script + '''
+                    </script>
+                ''',
+                menu = [
+                    ['w/' + url_pas(name), load_lang('return')],
+                    ['delete/' + url_pas(name), load_lang('delete')], 
+                    ['move/' + url_pas(name), load_lang('move')], 
+                    ['upload', load_lang('upload')]
+                ]
+            ))

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


+ 5 - 5
route/filter_inter_wiki.py

@@ -34,10 +34,6 @@ def inter_wiki(tool):
         elif tool == 'file_filter':
             title = load_lang('file_filter_list')
 
-            curs.execute(db_change("select html, plus, plus_t from html_filter where kind = 'file'"))
-        elif tool == 'file_filter':
-            title = load_lang('file_filter_list')
-
             curs.execute(db_change("select html, plus, plus_t from html_filter where kind = 'file'"))
         elif tool == 'image_license':
             title = load_lang('image_license_list')
@@ -69,7 +65,11 @@ def inter_wiki(tool):
             else:
                 div += '<td>' + html.escape(data[1]) + '</td>'
 
-            div += '<td>' + html.escape(data[2]) + '</td>'
+            if tool == 'inter_wiki':
+                div += '<td>' + data[2] + '</td>'
+            else:
+                div += '<td>' + html.escape(data[2]) + '</td>'
+            
             div += '</tr>'
 
         div += '</table>'

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


+ 28 - 35
route/list_old_page.py

@@ -1,37 +1,30 @@
 from .tool.func import *
 
-def list_old_page_2(conn):
-    curs = conn.cursor()
-
-    num = int(number_check(flask.request.args.get('num', '1')))
-    if num * 50 > 0:
-        sql_num = num * 50 - 50
-    else:
-        sql_num = 0
-
-    curs.execute(db_change('select data from other where name = "count_all_title"'))
-    if int(curs.fetchall()[0][0]) > 30000:
-        return re_error('/error/25')
-
-    div = '<ul class="inside_ul">'
-
-    curs.execute(db_change('' + \
-        'select title, date from history h ' + \
-        "where title not like 'user:%' and title not like 'category:%' and title not like 'file:%' and " + \
-        "exists (select title from data where title = h.title) and " + \
-        "not exists (select title from back where link = h.title and type = 'redirect') " + \
-        'group by title ' + \
-        'order by date asc ' + \
-        'limit ?, 50' + \
-    ''), [sql_num])
-    n_list = curs.fetchall()
-    for data in n_list:
-        div += '<li><a href="/w/' + url_pas(data[0]) + '">' + html.escape(data[0]) + '</a> (' + re.sub(r' .*$', '', data[1]) + ')</li>'
-
-    div += '</ul>' + next_fix('/old_page?num=', num, n_list)
-
-    return easy_minify(flask.render_template(skin_check(),
-        imp = [load_lang('old_page'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
-        data = div,
-        menu = [['other', load_lang('return')]]
-    ))
+def list_old_page():
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+        
+        num = flask.request.args.get('num', '1')
+        num = int(number_check(num))
+        sql_num = (num * 50 - 50) if num * 50 > 0 else 0
+        
+        curs.execute(db_change('select data from other where name = "count_all_title"'))
+        if int(curs.fetchall()[0][0]) > 30000:
+            return re_error('/error/25')
+        
+        div = '<ul class="inside_ul">'
+        
+        curs.execute(db_change('' + \
+            'select h.title, max(h.date) from history as h where not (title like "user:%" or title like "category:%" or title like "file:%") and exists (select title from data where title = h.title) and not exists (select title from back where link = h.title and type = "redirect") group by h.title order by h.date asc limit ?, 50' + \
+        ''), [sql_num])
+        n_list = curs.fetchall()
+        for data in n_list:
+            div += '<li>' + data[1] + ' | <a href="/w/' + url_pas(data[0]) + '">' + html.escape(data[0]) + '</a></li>'
+        
+        div += '</ul>' + next_fix('/old_page?num=', num, n_list)
+        
+        return easy_minify(flask.render_template(skin_check(),
+            imp = [load_lang('old_page'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
+            data = div,
+            menu = [['other', load_lang('return')]]
+        ))

+ 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')]]
-        ))

+ 2 - 2
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">
@@ -81,7 +81,7 @@ def main_tool_admin(num = 1, add_2 = ''):
         add_1 = flask.request.form.get('name', 'test')
         if flask.request.method == 'POST':
             if add_2 != '':
-                return redirect('/' + title_list[num][1] + '/' + url_pas(add_2) + '?plus=' + url_pas(add_1))
+                return redirect('/' + title_list[num][1] + '/' + url_pas(add_2) + '/doc_from/' + url_pas(add_1))
             elif flask.request.form.get('regex', '') != '':
                 return redirect('/' + title_list[num][1] + '/' + url_pas(add_1) + '?type=regex')
             else:

+ 3 - 2
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
@@ -84,7 +85,7 @@ global_wiki_set = {}
 
 global_db_set = ''
 
-data_css_ver = '119'
+data_css_ver = '120'
 data_css = ''
 
 conn = ''
@@ -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"

+ 0 - 15
route/tool/func_mark.py

@@ -110,24 +110,10 @@ class class_do_render:
         rep_data = curs.fetchall()
         rep_data = rep_data[0][0] if rep_data else 'namumark'
 
-        curs.execute(db_change('select html, plus, plus_t from html_filter where kind = "inter_wiki"'))
-        inter_wiki_data = curs.fetchall()
-        wiki_set_data = {
-            "inter_wiki" : {}
-        }
-        for i in inter_wiki_data:
-            wiki_set_data['inter_wiki'][i[0]] = {
-                "logo" : i[2],
-                "link" : i[1]
-            }
-
-        wiki_set_data = json.dumps(wiki_set_data, ensure_ascii = False)
-
         if data_type != 'backlink':
             if rep_data == 'namumark':
                 data_in = (data_in + '_') if data_in else ''
                 data_end = [
-                    '<pre style="display: none;" id="' + data_in + 'render_content_set">' + html.escape(wiki_set_data) + '</pre>' + \
                     '<pre style="display: none;" id="' + data_in + 'render_content_load">' + html.escape(doc_data) + '</pre>' + \
                     '<div class="render_content" id="' + data_in + 'render_content"></div>', 
                     '''
@@ -143,7 +129,6 @@ class class_do_render:
             elif rep_data == 'markdown':
                 data_in = (data_in + '_') if data_in else ''
                 data_end = [
-                    '<pre style="display: none;" id="' + data_in + 'render_content_set">' + html.escape(wiki_set_data) + '</pre>' + \
                     '<pre style="display: none;" id="' + data_in + 'render_content_load">' + html.escape(doc_data) + '</pre>' + \
                     '<div class="render_content" id="' + data_in + 'render_content"></div>', 
                     '''

+ 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')

+ 2 - 2
version.json

@@ -1,7 +1,7 @@
 {
     "beta" : {
-        "r_ver" : "v3.5.0 (stable1) (beta12) (dev24)",
+        "r_ver" : "v3.4.3 (stable1) (beta13) (dev27)",
         "c_ver" : "3500101",
         "s_ver" : "3500110"
     }
-}
+}

+ 152 - 71
views/main_css/js/render_onmark.js

@@ -140,8 +140,13 @@ function do_onmark_text_render(data) {
     return data;
 }
 
-function do_onmark_heading_render(data, data_js, name_doc, name_include) {
-    var heading_re = /\n(={1,6})(#)? ?([^=]+) ?#?={1,6}\n/;
+function do_onmark_heading_render(
+    data, 
+    data_js, 
+    name_doc, 
+    name_include
+) {
+    var heading_re = /\n(={1,6})(#)? ?([^\n]+) ?#?(?:={6}|={5}|={4}|={3}|={2}|={6})\n/;
     var heading_level_all = [0, 0, 0, 0, 0, 0];
     var toc_data = '';
     var toc_n = 0;
@@ -186,16 +191,21 @@ function do_onmark_heading_render(data, data_js, name_doc, name_include) {
             '<span style="margin-left: ' + String((heading_level_string.match(/\./g).length - 1) * 10) + 'px;">' +
                 '<a href="#s-' + heading_level_string_no_end + '">' + 
                     heading_level_string + ' ' +
-                '</a>' + heading_data_text +
+                '</a> ' + 
+                '<span id="toc_text_' + heading_level_string_no_end + '"></span>'
             '</span>' +
             '\n' +
         ''
+        data_js += 'document.getElementById("toc_text_' + heading_level_string_no_end + '").innerHTML = document.getElementById("heading_text_' + heading_level_string_no_end + '").innerText;\n';
+        
         data = data.replace(heading_re, 
             '\n' +
             (toc_n === 1 ? '' : '</div>') +
             '<h' + heading_level + ' class="render_heading_text">' + 
                 '<a href="#toc" id="s-' + heading_level_string_no_end + '">' + heading_level_string + '</a> ' + 
-                heading_data_text + ' ' +
+                '<span id="heading_text_' + heading_level_string_no_end + '">' +
+                    heading_data_text + 
+                '</span> ' +
                 '<a id="edit_load_' + String(toc_n) + '" ' +
                     'style="font-size: 70%;"' +
                     'href="/edit/' + do_url_change(name_doc) + '/doc_section/' + String(toc_n) + '">✎</a> ' +
@@ -227,7 +237,7 @@ function do_onmark_heading_render(data, data_js, name_doc, name_include) {
     
     data = data.replace(toc_re, toc_data);
     
-    return data;
+    return [data, data_js];
 }
 
 function do_onmark_link_render(data, data_js, name_doc, name_include, data_nowiki, data_wiki_set) {
@@ -1260,7 +1270,9 @@ function do_onmark_redirect_render(data, data_js, name_doc) {
         }
         
         return [
-            data.replace(redirect_re, '/w/' + do_url_change(link_main) + '/doc_from/' + do_url_change(name_doc) + link_sub), 
+            '/w/' + do_url_change(link_main) + 
+            '/doc_from/' + do_url_change(name_doc) + 
+            link_sub,
             data_js, 
             1
         ];
@@ -1290,7 +1302,6 @@ function do_onmark_render(
         var data = '\n' + 
             document.getElementById(name_id + '_load').innerHTML.replace(/\r/g, '') + 
         '\n';
-        data_wiki_set = JSON.parse(document.getElementById(name_id + '_set').innerHTML);
     } else if(test_mode === 'manual') { 
         var data = '\n' + 
             doc_data.replace(/\r/g, '') + 
@@ -1304,71 +1315,141 @@ function do_onmark_render(
     var data_backlink = [];
     var data_nowiki = {};
 
-    var data_var = do_onmark_redirect_render(data, data_js, name_doc, name_include);
-    data = data_var[0];
-    data_js = data_var[1];
-    var passing = data_var[2];
-
-    if(passing === 0) {
-        data = do_onmark_remark_render(data);
+    let xhr = new XMLHttpRequest();
+    xhr.open("GET", "/api/setting/inter_wiki");
+    xhr.send();
+
+    xhr.onreadystatechange = function() {
+        if(this.readyState === 4 && this.status === 200) {
+            data_wiki_set = JSON.parse(this.responseText);
+            let data_wiki_set_inter_wiki = { "inter_wiki" : {}};
+            if(data_wiki_set["inter_wiki"]) {
+                for(let i = 0; i < data_wiki_set["inter_wiki"].length; i++) {
+                    data_wiki_set_inter_wiki["inter_wiki"][
+                        data_wiki_set["inter_wiki"][i][0]
+                    ] = {
+                        "link" : data_wiki_set["inter_wiki"][i][1],
+                        "logo" : data_wiki_set["inter_wiki"][i][2]
+                    }
+                }
+            }
+            
+            let data_var = do_onmark_redirect_render(
+                data, 
+                data_js, 
+                name_doc, 
+                name_include
+            );
+            data = data_var[0];
+            data_js = data_var[1];
+            let passing = data_var[2];
+            
+            if(passing === 1) {
+                if(test_mode === 'normal') {
+                    document.getElementById(name_id).innerHTML = data + '<script>' + data_js + '</script>';
+                    eval(data_js);
+                } else if(test_mode === 'manual') {
+                    return [data, data_js];
+                } else {
+                	console.log([data, data_js]);
+                }
+                
+                return 0;
+            }
+            
+            data = do_onmark_remark_render(data);
+            
+            data_var = do_onmark_nowiki_before_render(
+                data, 
+                data_js, 
+                name_include, 
+                data_nowiki
+            );
+            data = data_var[0];
+            data_js = data_var[1];
+            data_nowiki = data_var[2];
+            
+            data_var = do_onmark_math_render(
+                data, 
+                data_js, 
+                name_include, 
+                data_nowiki
+            );
+            data = data_var[0];
+            data_js = data_var[1];
         
-        data_var = do_onmark_nowiki_before_render(data, data_js, name_include, data_nowiki);
-        data = data_var[0];
-        data_js = data_var[1];
-        data_nowiki = data_var[2];
+            data_var = do_onmark_include_render(
+                data, 
+                data_js, 
+                name_include, 
+                data_nowiki
+            );
+            data = data_var[0];
+            data_js = data_var[1];
         
-        data_var = do_onmark_math_render(data, data_js, name_include, data_nowiki);
-        data = data_var[0];
-        data_js = data_var[1];
-
-        data_var = do_onmark_include_render(data, data_js, name_include, data_nowiki);
-        data = data_var[0];
-        data_js = data_var[1];
-
-        data_var = do_onmark_middle_render(data, data_js, name_include, data_nowiki, name_doc);
-        data = data_var[0];
-        data_js = data_var[1];
-        data_nowiki = data_var[2];
-
-        data = do_onmark_text_render(data);
-        data = do_onmark_heading_render(data, data_js, name_doc, name_include);
-        data = do_onmark_table_render(data);
-
-        data_var = do_onmark_link_render(
-            data, 
-            data_js, 
-            name_doc, 
-            name_include,
-            data_nowiki,
-            data_wiki_set
-        );
-        data = data_var[0];
-        data_js = data_var[1];
-        var data_category = data_var[2];
-
-        data_var = do_onmark_macro_render(data, data_js);
-        data = data_var[0];
-        data_js = data_var[1];
+            data_var = do_onmark_middle_render(
+                data, 
+                data_js, 
+                name_include, 
+                data_nowiki, 
+                name_doc
+            );
+            data = data_var[0];
+            data_js = data_var[1];
+            data_nowiki = data_var[2];
         
-        data = do_onmark_list_render(data);
-        data = do_onmark_hr_render(data);
-        data = do_onmark_footnote_render(data, name_include);
-        data = do_onmark_last_render(data, name_include, data_category);
-    }
-    
-    data_js += '' + 
-        'get_link_state("' + name_include + '");\n' + 
-        'get_file_state("' + name_include + '");\n' + 
-		'get_heading_name();' +
-        'render_html("' + name_include + 'nowiki_html");\n' +
-    ''
-    
-    if(test_mode === 'normal') {
-        document.getElementById(name_id).innerHTML = data + '<script>' + data_js + '</script>';
-        eval(data_js);
-    } else if(test_mode === 'manual') {
-        return [data, data_js];
-    } else {
-    	console.log([data, data_js]);
+            data = do_onmark_text_render(data);
+            data_var = do_onmark_heading_render(
+                data, 
+                data_js, 
+                name_doc, 
+                name_include
+            );
+            data = data_var[0];
+            data_js = data_var[1];
+            
+            data = do_onmark_table_render(data);
+        
+            data_var = do_onmark_link_render(
+                data, 
+                data_js, 
+                name_doc, 
+                name_include,
+                data_nowiki,
+                data_wiki_set_inter_wiki
+            );
+            data = data_var[0];
+            data_js = data_var[1];
+            var data_category = data_var[2];
+        
+            data_var = do_onmark_macro_render(data, data_js);
+            data = data_var[0];
+            data_js = data_var[1];
+            
+            data = do_onmark_list_render(data);
+            data = do_onmark_hr_render(data);
+            data = do_onmark_footnote_render(data, name_include);
+            data = do_onmark_last_render(
+                data, 
+                name_include, 
+                data_category
+            );
+            
+            data_js += '' + 
+                'get_link_state("' + name_include + '");\n' + 
+                'get_file_state("' + name_include + '");\n' + 
+        		'get_heading_name();\n' +
+                'render_html("' + name_include + 'nowiki_html");\n' +
+            ''
+            
+            if(test_mode === 'normal') {
+                document.getElementById(name_id).innerHTML = data + '<script>' + data_js + '</script>';
+                eval(data_js);
+            } else if(test_mode === 'manual') {
+                return [data, data_js];
+            } else {
+            	console.log([data, data_js]);
+            }
+        }
     }
-}
+}

+ 4 - 4
views/main_css/js/render_wiki.js

@@ -53,10 +53,10 @@ function get_link_state(data) {
 }
 
 function get_heading_name() {
-	let heading_name = document.getElementsByClassName('render_heading_text');
-	for(let i = 0; i < heading_name.length; i++) {
-		heading_name[i].id = heading_name[i].innerText.replace(/^([0-9]+\.)+ /, '').replace(/✎ ⊖$/, '');
-	}
+    let heading_name = document.getElementsByClassName('render_heading_text');
+    for(let i = 0; i < heading_name.length; i++) {
+        heading_name[i].id = heading_name[i].innerText.replace(/^([0-9]+\.)+ /, '').replace(/✎ ⊖$/, '');
+    }
 }
 
 function load_image_link(data) {

+ 1 - 1
views/ringo/index.html

@@ -48,7 +48,7 @@
                             <span class="iconify" data-icon="ic:baseline-person-add" data-inline="true"></span>
                         {% endif %}
                     {% else %}
-                        <span class="iconify" data-icon="ic:baseline-person" data-inline="true"></span>
+                        <span class="iconify" data-icon="ic:round-person-search" data-inline="true"></span>
                     {% endif %}
                     <span class="not_mobile">{{'tool'|load_lang}}</span>
                     <span class="iconify" data-icon="ic:baseline-arrow-drop-down" data-inline="true"></span>

+ 2 - 2
views/tenshi/index.html

@@ -102,10 +102,10 @@
                                         {% if imp[2][8] != '0' %}
                                             <span class="iconify" data-icon="ic:baseline-add-alert" data-inline="true"></span>
                                         {% else %}
-                                            <span class="iconify" data-icon="ic:baseline-person-add" data-inline="true"></span>
+                                            <span class="iconify" data-icon="ic:baseline-person" data-inline="true"></span>
                                         {% endif %}
                                     {% else %}
-                                        <span class="iconify" data-icon="ic:baseline-person" data-inline="true"></span>
+                                        <span class="iconify" data-icon="ic:round-person-search" data-inline="true"></span>
                                     {% endif %}
                                     <span class="not_mobile">{{imp[2][5]}}</span>
                                 </a>