Bläddra i källkod

일단 기능은 전부 분리 끝

Surplus_Up (2DU) 7 år sedan
förälder
incheckning
52927e99cf

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 18 - 1254
app.py


+ 117 - 0
route/acl.py

@@ -0,0 +1,117 @@
+from .tool.func import *
+
+def acl_2(conn, name):
+    curs = conn.cursor()
+
+    check_ok = ''
+    
+    if flask.request.method == 'POST':
+        check_data = 'acl (' + name + ')'
+    else:
+        check_data = None
+    
+    user_data = re.search('^user:(.+)$', name)
+    if user_data:
+        if check_data and custom()[2] == 0:
+            return redirect('/login')
+        
+        if user_data.groups()[0] != ip_check():
+            if admin_check(5, check_data) != 1:
+                if check_data:
+                    return re_error('/error/3')
+                else:
+                    check_ok = 'disabled'
+    else:
+        if admin_check(5, check_data) != 1:
+            if check_data:
+                return re_error('/error/3')
+            else:
+                check_ok = 'disabled'
+
+    if flask.request.method == 'POST':
+        if flask.request.form.get('dec', '') != flask.request.form.get('view', ''):
+            dec = flask.request.form.get('view', '')
+            view = flask.request.form.get('view', '')
+        else:
+            dec = flask.request.form.get('dec', '')
+            view = flask.request.form.get('view', '')
+
+        curs.execute("select title from acl where title = ?", [name])
+        if curs.fetchall():
+            curs.execute("update acl set dec = ? where title = ?", [dec, name])
+            curs.execute("update acl set dis = ? where title = ?", [flask.request.form.get('dis', ''), name])
+            curs.execute("update acl set why = ? where title = ?", [flask.request.form.get('why', ''), name])
+            curs.execute("update acl set view = ? where title = ?", [view, name])
+        else:
+            curs.execute("insert into acl (title, dec, dis, why, view) values (?, ?, ?, ?, ?)", [name, dec, flask.request.form.get('dis', ''), flask.request.form.get('why', ''), view])
+        
+        curs.execute("select title from acl where title = ? and dec = '' and dis = ''", [name])
+        if curs.fetchall():
+            curs.execute("delete from acl where title = ?", [name])
+
+        conn.commit()
+            
+        return redirect('/acl/' + url_pas(name))            
+    else:
+        data = '' + load_lang('document_acl') + '<br><br><select name="dec" ' + check_ok + '>'
+    
+        if re.search('^user:', name):
+            acl_list = [['', load_lang('normal')], ['user', load_lang('member')], ['all', load_lang('all')]]
+        else:
+            acl_list = [['', load_lang('normal')], ['user', load_lang('member')], ['admin', load_lang('admin')]]
+        
+        curs.execute("select dec from acl where title = ?", [name])
+        acl_data = curs.fetchall()
+        for data_list in acl_list:
+            if acl_data and acl_data[0][0] == data_list[0]:
+                check = 'selected="selected"'
+            else:
+                check = ''
+            
+            data += '<option value="' + data_list[0] + '" ' + check + '>' + data_list[1] + '</option>'
+            
+        data += '</select>'
+        
+        if not re.search('^user:', name):
+            data += '<hr class=\"main_hr\">' + load_lang('discussion_acl') + '<br><br><select name="dis" ' + check_ok + '>'
+        
+            curs.execute("select dis, why, view from acl where title = ?", [name])
+            acl_data = curs.fetchall()
+            for data_list in acl_list:
+                if acl_data and acl_data[0][0] == data_list[0]:
+                    check = 'selected="selected"'
+                else:
+                    check = ''
+                    
+                data += '<option value="' + data_list[0] + '" ' + check + '>' + data_list[1] + '</option>'
+                
+            data += '</select>'
+
+            data += '<hr class=\"main_hr\">' + load_lang('view_acl') + '<br><br><select name="view" ' + check_ok + '>'
+            for data_list in acl_list:
+                if acl_data and acl_data[0][2] == data_list[0]:
+                    check = 'selected="selected"'
+                else:
+                    check = ''
+                    
+                data += '<option value="' + data_list[0] + '" ' + check + '>' + data_list[1] + '</option>'
+                
+            data += '</select>'
+                
+            if check_ok == '':
+                if acl_data:
+                    data += '<hr class=\"main_hr\"><input value="' + html.escape(acl_data[0][1]) + '" placeholder="' + load_lang('why') + '" name="why" type="text" ' + check_ok + '>'
+                else:
+                    data += '<hr class=\"main_hr\"><input placeholder="' + load_lang('why') + '" name="why" type="text" ' + check_ok + '>'
+            
+        return easy_minify(flask.render_template(skin_check(), 
+            imp = [name, wiki_set(), custom(), other2([' (' + load_lang('acl') + ')', 0])],
+            data =  '''
+                <form method="post">
+                    ''' + data + '''
+                    <hr class=\"main_hr\">
+                    <button type="submit" ''' + check_ok + '''>''' + load_lang('save') + '''</button>
+                </form>
+            ''',
+            menu = [['w/' + url_pas(name), load_lang('document')], ['manager', load_lang('admin')]]
+        ))

+ 120 - 0
route/change_password.py

@@ -0,0 +1,120 @@
+from .tool.func import *
+
+def change_password_2(conn):
+    curs = conn.cursor()
+
+    support_language = server_init.server_set_var['language']['list']
+
+    if ban_check() == 1:
+        return re_error('/ban')
+
+    if custom()[2] == 0:
+        return redirect('/login')
+
+    ip = ip_check()
+    user_state = flask.request.args.get('user', 'ip')
+    
+    if user_state == 'ip':
+        if flask.request.method == 'POST':    
+            if flask.request.form.get('pw4', None) and flask.request.form.get('pw2', None):
+                if flask.request.form.get('pw2', None) != flask.request.form.get('pw3', None):
+                    return re_error('/error/20')
+
+                curs.execute("select pw, encode from user where id = ?", [flask.session['id']])
+                user = curs.fetchall()
+                if not user:
+                    return re_error('/error/2')
+                
+                pw_check_d = pw_check(
+                    flask.request.form.get('pw4', ''), 
+                    user[0][0],
+                    user[0][1],
+                    flask.request.form.get('id', None)
+                )
+                if pw_check_d != 1:
+                    return re_error('/error/10')
+
+                hashed = pw_encode(flask.request.form.get('pw2', None))
+                
+                curs.execute("update user set pw = ? where id = ?", [hashed, flask.session['id']])
+
+            auto_list = ['email', 'skin', 'lang']
+
+            for auto_data in auto_list:
+                curs.execute('select data from user_set where name = ? and id = ?', [auto_data, ip])
+                if curs.fetchall():
+                    curs.execute("update user_set set data = ? where name = ? and id = ?", [flask.request.form.get(auto_data, ''), auto_data, ip])
+                else:
+                    curs.execute("insert into user_set (name, id, data) values (?, ?, ?)", [auto_data, ip, flask.request.form.get(auto_data, '')])
+
+            conn.commit()
+            
+            return redirect('/change')
+        else:        
+            curs.execute('select data from user_set where name = "email" and id = ?', [ip])
+            data = curs.fetchall()
+            if data:
+                email = data[0][0]
+            else:
+                email = ''
+
+            div2 = load_skin()
+            
+            div3 = ''
+            var_div3 = ''
+
+            curs.execute('select data from user_set where name = "lang" and id = ?', [flask.session['id']])
+            data = curs.fetchall()
+
+            for lang_data in support_language:
+                if data and data[0][0] == lang_data:
+                    div3 = '<option value="' + lang_data + '">' + lang_data + '</option>'
+                else:
+                    var_div3 += '<option value="' + lang_data + '">' + lang_data + '</option>'
+
+            div3 += var_div3
+
+            oauth_provider = load_oauth('_README')['support']
+            oauth_content = '<ul>'
+            for i in range(len(oauth_provider)):
+                curs.execute('select name, picture from oauth_conn where wiki_id = ? and provider = ?', [flask.session['id'], oauth_provider[i]])
+                oauth_data = curs.fetchall()
+                if len(oauth_data) == 1:
+                    oauth_content += '<li>{} - {}</li>'.format(oauth_provider[i], load_lang('connection') + ' : <img src="{}" width="17px" height="17px">{}'.format(oauth_data[0][1], oauth_data[0][0]))
+                else:
+                    oauth_content += '<li>{} - {}</li>'.format(oauth_provider[i], load_lang('connection') + ' : <a href="/oauth/{}/init">{}</a>'.format(oauth_provider[i], load_lang('connect')))
+            
+            oauth_content += '</ul>'
+
+            return easy_minify(flask.render_template(skin_check(),    
+                imp = [load_lang('user_setting'), wiki_set(), custom(), other2([0, 0])],
+                data =  '''
+                        <form method="post">
+                            <span>id : ''' + ip + '''</span>
+                            <hr class=\"main_hr\">
+                            <input placeholder="''' + load_lang('now_password') + '''" name="pw4" type="password">
+                            <hr class=\"main_hr\">
+                            <input placeholder="''' + load_lang('new_password') + '''" name="pw2" type="password">
+                            <hr class=\"main_hr\">
+                            <input placeholder="''' + load_lang('password_confirm') + '''" name="pw3" type="password">
+                            <hr class=\"main_hr\">
+                            <span>''' + load_lang('skin') + '''</span>
+                            <hr class=\"main_hr\">
+                            <select name="skin">''' + div2 + '''</select>
+                            <hr class=\"main_hr\">
+                            <span>''' + load_lang('language') + '''</span>
+                            <hr class=\"main_hr\">
+                            <select name="lang">''' + div3 + '''</select>
+                            <hr class=\"main_hr\">
+                            <span>''' + load_lang('oauth_connection') + '''</span>
+                            ''' + oauth_content + '''
+                            <hr class=\"main_hr\">
+                            <button type="submit">''' + load_lang('save') + '''</button>
+                            <hr class=\"main_hr\">
+                            <span>''' + load_lang('http_warring') + '''</span>
+                        </form>
+                        ''',
+                menu = [['user', load_lang('return')]]
+            ))
+    else:
+        pass

+ 83 - 0
route/check_key.py

@@ -0,0 +1,83 @@
+from .tool.func import *
+
+def check_key_2(conn, tool):
+    curs = conn.cursor()
+
+    if flask.request.method == 'POST':
+        if tool == 'check_key':
+            if 'c_id' in flask.session and flask.session['c_key'] == flask.request.form.get('key', None):
+                curs.execute('select data from other where name = "encode"')
+                db_data = curs.fetchall()
+
+                curs.execute("select id from user limit 1")
+                if not curs.fetchall():
+                    curs.execute("insert into user (id, pw, acl, date, encode) values (?, ?, 'owner', ?)", [flask.session['c_id'], flask.session['c_pw'], get_time(), db_data[0][0]])
+
+                    first = 1
+                else:
+                    curs.execute("insert into user (id, pw, acl, date, encode) values (?, ?, 'user', ?)", [flask.session['c_id'], flask.session['c_pw'], get_time(), db_data[0][0]])
+
+                    first = 0
+
+                ip = ip_check()
+                agent = flask.request.headers.get('User-Agent')
+
+                curs.execute("insert into user_set (name, id, data) values ('email', ?, ?)", [flask.session['c_id'], flask.session['c_email']])
+                curs.execute("insert into ua_d (name, ip, ua, today, sub) values (?, ?, ?, ?, '')", [flask.session['c_id'], ip, agent, get_time()])
+
+                flask.session['state'] = 1
+                flask.session['id'] = flask.session['c_id']
+                flask.session['head'] = ''
+                        
+                conn.commit()
+                
+                flask.session.pop('c_id', None)
+                flask.session.pop('c_pw', None)
+                flask.session.pop('c_key', None)
+                flask.session.pop('c_email', None)
+
+                if first == 0:
+                    return redirect('/change')
+                else:
+                    return redirect('/setting')
+            else:
+                flask.session.pop('c_id', None)
+                flask.session.pop('c_pw', None)
+                flask.session.pop('c_key', None)
+                flask.session.pop('c_email', None)
+
+                return redirect('/register')
+        else:
+            if 'c_id' in flask.session and flask.session['c_key'] == flask.request.form.get('key', None):
+                hashed = pw_encode(flask.session['c_key'])
+                curs.execute("update user set pw = ? where id = ?", [hashed, flask.session['c_id']])
+
+                d_id = flask.session['c_id']
+                pw = flask.session['c_key']
+
+                flask.session.pop('c_id', None)
+                flask.session.pop('c_key', None)
+
+                return easy_minify(flask.render_template(skin_check(),    
+                    imp = ['check', wiki_set(), custom(), other2([0, 0])],
+                    data =  '''
+                            ''' + load_lang('id') + ' : ' + d_id + '''
+                            <br>
+                            ''' + load_lang('password') + ' : ' + pw + '''
+                            ''',
+                    menu = [['user', load_lang('return')]]
+                ))
+            else:
+                return redirect('/pass_find')
+    else:
+        return easy_minify(flask.render_template(skin_check(),    
+            imp = ['check', wiki_set(), custom(), other2([0, 0])],
+            data =  '''
+                    <form method="post">
+                        <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')]]
+        ))

+ 34 - 0
route/count_edit.py

@@ -0,0 +1,34 @@
+from .tool.func import *
+
+def count_edit_2(conn, name):
+    curs = conn.cursor()
+
+    if name == None:
+        that = ip_check()
+    else:
+        that = name
+
+    curs.execute("select count(title) from history where ip = ?", [that])
+    count = curs.fetchall()
+    if count:
+        data = count[0][0]
+    else:
+        data = 0
+
+    curs.execute("select count(title) from topic where ip = ?", [that])
+    count = curs.fetchall()
+    if count:
+        t_data = count[0][0]
+    else:
+        t_data = 0
+
+    return easy_minify(flask.render_template(skin_check(), 
+        imp = [load_lang('count'), wiki_set(), custom(), other2([0, 0])],
+        data =  '''
+                <ul>
+                    <li><a href="/record/''' + url_pas(that) + '''">''' + load_lang('edit_record') + '''</a> : ''' + str(data) + '''</li>
+                    <li><a href="/topic_record/''' + url_pas(that) + '''">''' + load_lang('discussion_record') + '''</a> : ''' + str(t_data) + '''</a></li>
+                </ul>
+                ''',
+        menu = [['user', load_lang('return')]]
+    ))

+ 51 - 0
route/custom_head_view.py

@@ -0,0 +1,51 @@
+from .tool.func import *
+
+def custom_head_view_2(conn):
+    curs = conn.cursor()
+
+    ip = ip_check()
+
+    if flask.request.method == 'POST':
+        if custom()[2] != 0:
+            curs.execute("select user from custom where user = ?", [ip + ' (head)'])
+            if curs.fetchall():
+                curs.execute("update custom set css = ? where user = ?", [flask.request.form.get('content', None), ip + ' (head)'])
+            else:
+                curs.execute("insert into custom (user, css) values (?, ?)", [ip + ' (head)', flask.request.form.get('content', None)])
+            
+            conn.commit()
+
+        flask.session['head'] = flask.request.form.get('content', None)
+
+        return redirect('/user')
+    else:
+        if custom()[2] != 0:
+            start = ''
+
+            curs.execute("select css from custom where user = ?", [ip + ' (head)'])
+            head_data = curs.fetchall()
+            if head_data:
+                data = head_data[0][0]
+            else:
+                data = ''
+        else:
+            start = '<span>' + load_lang('user_head_warring') + '</span><hr class=\"main_hr\">'
+            
+            if 'head' in flask.session:
+                data = flask.session['head']
+            else:
+                data = ''
+
+        start += '<span>&lt;style&gt;css&lt;/style&gt;<br>&lt;script&gt;js&lt;/script&gt;</span><hr class=\"main_hr\">'
+
+        return easy_minify(flask.render_template(skin_check(), 
+            imp = [load_lang(data = 'user_head', safe = 1), wiki_set(), custom(), other2([0, 0])],
+            data =  start + '''
+                    <form method="post">
+                        <textarea rows="25" cols="100" name="content">''' + data + '''</textarea>
+                        <hr class=\"main_hr\">
+                        <button id="save" type="submit">''' + load_lang('save') + '''</button>
+                    </form>
+                    ''',
+            menu = [['user', load_lang('return')]]
+        ))

+ 30 - 0
route/diff_data.py

@@ -0,0 +1,30 @@
+from .tool.func import *
+
+def diff_data_2(conn, name):
+    curs = conn.cursor()
+
+    first = flask.request.args.get('first', '1')
+    second = flask.request.args.get('second', '1')
+
+    curs.execute("select data from history where id = ? and title = ?", [first, name])
+    first_raw_data = curs.fetchall()
+    if first_raw_data:
+        curs.execute("select data from history where id = ? and title = ?", [second, name])
+        second_raw_data = curs.fetchall()
+        if second_raw_data:
+            first_data = html.escape(first_raw_data[0][0])            
+            second_data = html.escape(second_raw_data[0][0])
+
+            if first == second:
+                result = '-'
+            else:            
+                diff_data = difflib.SequenceMatcher(None, first_data, second_data)
+                result = re.sub('\r', '', diff(diff_data))
+            
+            return easy_minify(flask.render_template(skin_check(), 
+                imp = [name, wiki_set(), custom(), other2([' (' + load_lang('compare') + ')', 0])],
+                data = '<pre>' + result + '</pre>',
+                menu = [['history/' + url_pas(name), load_lang('return')]]
+            ))
+
+    return redirect('/history/' + url_pas(name))

+ 18 - 0
route/down.py

@@ -0,0 +1,18 @@
+from .tool.func import *
+
+def down_2(conn, name):
+    curs = conn.cursor()
+
+    div = '<ul>'
+
+    curs.execute("select title from data where title like ?", ['%' + name + '/%'])
+    for data in curs.fetchall():
+        div += '<li><a href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a></li>'
+        
+    div += '</ul>'
+    
+    return easy_minify(flask.render_template(skin_check(), 
+        imp = [name, wiki_set(), custom(), other2([' (' + load_lang('sub') + ')', 0])],
+        data = div,
+        menu = [['w/' + url_pas(name), load_lang('return')]]
+    ))

+ 67 - 0
route/need_email.py

@@ -0,0 +1,67 @@
+from .tool.func import *
+
+def need_email_2(conn, tool):
+    curs = conn.cursor()
+
+    if flask.request.method == 'POST':
+        if tool == 'need_email':
+            if 'c_id' in flask.session:
+                main_email = ['naver.com', 'gmail.com', 'daum.net', 'hanmail.net', 'hanmail2.net']
+                data = re.search('@([^@]+)$', flask.request.form.get('email', ''))
+                if data:
+                    data = data.groups()[0]
+
+                    curs.execute("select html from html_filter where html = ? and kind = 'email'", [data])
+                    if curs.fetchall() or (data in main_email):
+                        curs.execute('select id from user_set where name = "email" and data = ?', [flask.request.form.get('email', '')])
+                        if curs.fetchall():
+                            flask.session.pop('c_id', None)
+                            flask.session.pop('c_pw', None)
+                            flask.session.pop('c_key', None)
+
+                            return redirect('/register')
+                        else:
+                            send_email(flask.request.form.get('email', ''), wiki_set()[0] + ' key', 'key : ' + flask.session['c_key'])
+                            flask.session['c_email'] = flask.request.form.get('email', '')
+
+                            return redirect('/check_key')
+
+            return redirect('/register')
+        else:
+            curs.execute("select id from user where id = ? and email = ?", [flask.request.form.get('id', ''), flask.request.form.get('email', '')])
+            if curs.fetchall():
+                flask.session['c_key'] = ''.join(random.choice("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") for i in range(16))
+                flask.session['c_id'] = flask.request.form.get('id', '')
+
+                send_email(flask.request.form.get('email', ''), wiki_set()[0] + ' ' + load_lang('password_search') + ' key', 'key : ' + flask.session['c_key'])
+
+                return redirect('/check_pass_key')
+    else:
+        if tool == 'need_email':
+            return easy_minify(flask.render_template(skin_check(),    
+                imp = [load_lang('email'), wiki_set(), custom(), other2([0, 0])],
+                data =  '''
+                        <a href="/email_filter">(''' + load_lang('email_filter_list') + ''')</a>
+                        <hr class=\"main_hr\">
+                        <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')]]
+            ))
+        else:
+            return easy_minify(flask.render_template(skin_check(),    
+                imp = [load_lang('password_search'), wiki_set(), custom(), other2([0, 0])],
+                data =  '''
+                        <form method="post">
+                            <input placeholder="''' + load_lang('id') + '''" name="id" type="text">
+                            <hr class=\"main_hr\">
+                            <input placeholder="email" name="email" type="text">
+                            <hr class=\"main_hr\">
+                            <button type="submit">''' + load_lang('save') + '''</button>
+                        </form>
+                        ''',
+                menu = [['user', load_lang('return')]]
+            ))

+ 178 - 0
route/recent_changes.py

@@ -0,0 +1,178 @@
+from .tool.func import *
+
+def recent_changes_2(conn, name, tool):
+    curs = conn.cursor()
+
+    if flask.request.method == 'POST':
+        return redirect('/diff/' + url_pas(name) + '?first=' + flask.request.form.get('b', None) + '&second=' + flask.request.form.get('a', None))
+    else:
+        one_admin = admin_check(1)
+        six_admin = admin_check(6)
+        
+        ban = ''
+        select = ''
+
+        div =   '''
+                <table id="main_table_set">
+                    <tbody>
+                        <tr>
+                '''
+        
+        if name:
+            num = int(number_check(flask.request.args.get('num', '1')))
+            if num * 50 > 0:
+                sql_num = num * 50 - 50
+            else:
+                sql_num = 0      
+
+            if tool == 'history':
+                div +=  '''
+                        <td id="main_table_width">''' + load_lang('version') + '''</td>
+                        <td id="main_table_width">''' + load_lang('editor') + '''</td>
+                        <td id="main_table_width">''' + load_lang('time') + '''</td></tr>
+                        '''
+                
+                curs.execute("select id, title, date, ip, send, leng from history where title = ? order by id + 0 desc limit ?, '50'", [name, str(sql_num)])
+            else:
+                div +=  '''
+                            <td id="main_table_width">''' + load_lang('document_name') + '''</td>
+                            <td id="main_table_width">''' + load_lang('editor') + '''</td>
+                            <td id="main_table_width">''' + load_lang('time') + '''</td>
+                        </tr>
+                        '''
+
+                div = '<a href="/topic_record/' + url_pas(name) + '">(' + load_lang('discussion') + ')</a><hr class=\"main_hr\">' + div
+                
+                curs.execute("select id, title, date, ip, send, leng from history where ip = ? order by date desc limit ?, '50'", [name, str(sql_num)])
+        else:
+            num = int(number_check(flask.request.args.get('num', '1')))
+            if num * 50 > 0:
+                sql_num = num * 50 - 50
+            else:
+                sql_num = 0            
+            
+            div +=  '''
+                        <td id="main_table_width">''' + load_lang('document_name') + '''</td>
+                        <td id="main_table_width">''' + load_lang('editor') + '''</td>
+                        <td id="main_table_width">''' + load_lang('time') + '''</td>
+                    </tr>
+                    '''
+            
+            curs.execute("select id, title, date, ip, send, leng from history where not title like 'user:%' order by date desc limit ?, 50", [str(sql_num)])
+
+        data_list = curs.fetchall()
+        for data in data_list:    
+            select += '<option value="' + data[0] + '">' + data[0] + '</option>'     
+            send = '<br>'
+            
+            if data[4]:
+                if not re.search("^(?: *)$", data[4]):
+                    send = data[4]
+            
+            if re.search("\+", data[5]):
+                leng = '<span style="color:green;">(' + data[5] + ')</span>'
+            elif re.search("\-", data[5]):
+                leng = '<span style="color:red;">(' + data[5] + ')</span>'
+            else:
+                leng = '<span style="color:gray;">(' + data[5] + ')</span>'
+                
+            ip = ip_pas(data[3])
+            if int(data[0]) - 1 == 0:
+                revert = ''
+            else:
+                revert = '<a href="/diff/' + url_pas(data[1]) + '?first=' + str(int(data[0]) - 1) + '&second=' + data[0] + '">(' + load_lang('compare') + ')</a> <a href="/revert/' + url_pas(data[1]) + '?num=' + str(int(data[0]) - 1) + '">(' + load_lang('revert') + ')</a>'
+            
+            style = ['', '']
+            date = data[2]
+
+            curs.execute("select title from history where title = ? and id = ? and hide = 'O'", [data[1], data[0]])
+            hide = curs.fetchall()
+            
+            if six_admin == 1:
+                if hide:                            
+                    hidden = ' <a href="/hidden/' + url_pas(data[1]) + '?num=' + data[0] + '">(' + load_lang('hide_release') + ')'
+                    
+                    style[0] = 'id="toron_color_grey"'
+                    style[1] = 'id="toron_color_grey"'
+                    
+                    if send == '<br>':
+                        send = '(' + load_lang('hide') + ')'
+                    else:
+                        send += ' (' + load_lang('hide') + ')'
+                else:
+                    hidden = ' <a href="/hidden/' + url_pas(data[1]) + '?num=' + data[0] + '">(' + load_lang('hide') + ')'
+            elif not hide:
+                hidden = ''
+            else:
+                ip = ''
+                hidden = ''
+                ban = ''
+                date = ''
+
+                send = '(' + load_lang('hide') + ')'
+
+                style[0] = 'style="display: none;"'
+                style[1] = 'id="toron_color_grey"'
+
+            if tool == 'history':
+                title = '<a href="/w/' + url_pas(name) + '?num=' + data[0] + '">r' + data[0] + '</a> <a href="/raw/' + url_pas(name) + '?num=' + data[0] + '">(' + load_lang('raw') + ')</a> '
+            else:
+                title = '<a href="/w/' + url_pas(data[1]) + '">' + html.escape(data[1]) + '</a> <a href="/history/' + url_pas(data[1]) + '">(r' + data[0] + ')</a> '
+                    
+            div +=  '''
+                    <tr ''' + style[0] + '''>
+                        <td>''' + title + revert + ' ' + leng + '''</td>
+                        <td>''' + ip + ban + hidden + '''</td>
+                        <td>''' + date + '''</td>
+                    </tr>
+                    <tr ''' + style[1] + '''>
+                        <td colspan="3">''' + send_parser(send) + '''</td>
+                    </tr>
+                    '''
+
+        div +=  '''
+                    </tbody>
+                </table>
+                '''
+        sub = ''
+
+        if name:
+            if tool == 'history':
+                div =   '''
+                        <form method="post">
+                            <select name="a">''' + select + '''</select> <select name="b">''' + select + '''</select>
+                            <button type="submit">''' + load_lang('compare') + '''</button>
+                        </form>
+                        <hr class=\"main_hr\">
+                        ''' + div
+                title = name
+                
+                sub += ' (' + load_lang('history') + ')'
+                
+                menu = [['w/' + url_pas(name), load_lang('document')], ['raw/' + url_pas(name), 'raw']]
+                
+                div += next_fix('/history/' + url_pas(name) + '?num=', num, data_list)
+            else:
+                curs.execute("select end from ban where block = ?", [name])
+                if curs.fetchall():
+                    sub += ' (' + load_lang('blocked') + ')'
+
+                title = load_lang('edit_record')
+                
+                menu = [['other', load_lang('other')], ['user', load_lang('user')], ['count/' + url_pas(name), load_lang('count')]]
+                
+                div += next_fix('/record/' + url_pas(name) + '?num=', num, data_list)
+        else:
+            menu = 0
+            title = load_lang('recent_change')
+                
+            div += next_fix('/recent_changes?num=', num, data_list)
+        
+        if sub == '':
+            sub = 0
+                
+        return easy_minify(flask.render_template(skin_check(), 
+            imp = [title, wiki_set(), custom(), other2([sub, 0])],
+            data = div,
+            menu = menu
+        ))

+ 109 - 0
route/register.py

@@ -0,0 +1,109 @@
+from .tool.func import *
+
+def register_2(conn):
+    curs = conn.cursor()
+
+    if ban_check() == 1:
+        return re_error('/ban')
+
+    if custom()[2] != 0:
+        return redirect('/user')
+
+    if not admin_check() == 1:
+        curs.execute('select data from other where name = "reg"')
+        set_d = curs.fetchall()
+        if set_d and set_d[0][0] == 'on':
+            return re_error('/ban')
+    
+    if flask.request.method == 'POST': 
+        if captcha_post(flask.request.form.get('g-recaptcha-response', '')) == 1:
+            return re_error('/error/13')
+        else:
+            captcha_post('', 0)
+
+        if flask.request.form.get('pw', None) != flask.request.form.get('pw2', None):
+            return re_error('/error/20')
+
+        if re.search('(?:[^A-Za-zㄱ-힣0-9 ])', flask.request.form.get('id', None)):
+            return re_error('/error/8')
+            
+        curs.execute('select html from html_filter where kind = "name"')
+        set_d = curs.fetchall()
+        for i in set_d:
+            check_r = re.compile(i[0], re.I)
+            if check_r.search(flask.request.form.get('id', None)):
+                return re_error('/error/8')
+
+        if len(flask.request.form.get('id', None)) > 32:
+            return re_error('/error/7')
+
+        curs.execute("select id from user where id = ?", [flask.request.form.get('id', None)])
+        if curs.fetchall():
+            return re_error('/error/6')
+
+        hashed = pw_encode(flask.request.form.get('pw', None))
+        
+        curs.execute('select data from other where name = "email_have"')
+        sql_data = curs.fetchall()
+        if sql_data and sql_data[0][0] != '':
+            flask.session['c_id'] = flask.request.form.get('id', None)
+            flask.session['c_pw'] = hashed
+            flask.session['c_key'] = ''.join(random.choice("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") for i in range(16))
+
+            return redirect('/need_email')
+        else:
+            curs.execute('select data from other where name = "encode"')
+            db_data = curs.fetchall()
+
+            curs.execute("select id from user limit 1")
+            if not curs.fetchall():
+                curs.execute("insert into user (id, pw, acl, date, encode) values (?, ?, 'owner', ?, ?)", [flask.request.form.get('id', None), hashed, get_time(), db_data[0][0]])
+
+                first = 1
+            else:
+                curs.execute("insert into user (id, pw, acl, date, encode) values (?, ?, 'user', ?, ?)", [flask.request.form.get('id', None), hashed, get_time(), db_data[0][0]])
+
+                first = 0
+
+            ip = ip_check()
+            agent = flask.request.headers.get('User-Agent')
+
+            curs.execute("insert into ua_d (name, ip, ua, today, sub) values (?, ?, ?, ?, '')", [flask.request.form.get('id', None), ip, agent, get_time()])  
+
+            flask.session['state'] = 1
+            flask.session['id'] = flask.request.form.get('id', None)
+            flask.session['head'] = ''
+                  
+            conn.commit()
+            
+            if first == 0:
+                return redirect('/change')
+            else:
+                return redirect('/setting')
+    else:        
+        contract = ''
+        
+        curs.execute('select data from other where name = "contract"')
+        data = curs.fetchall()
+        if data and data[0][0] != '':
+            contract = data[0][0] + '<hr class=\"main_hr\">'
+
+        return easy_minify(flask.render_template(skin_check(),    
+            imp = [load_lang('register'), wiki_set(), custom(), other2([0, 0])],
+            data =  '''
+                    <form method="post">
+                        ''' + contract + '''
+                        <input placeholder="''' + load_lang('id') + '''" name="id" type="text">
+                        <hr class=\"main_hr\">
+                        <input placeholder="''' + load_lang('password') + '''" name="pw" type="password">
+                        <hr class=\"main_hr\">
+                        <input placeholder="''' + load_lang('password_confirm') + '''" name="pw2" type="password">
+                        <hr class=\"main_hr\">
+                        ''' + captcha_get() + '''
+                        <button type="submit">''' + load_lang('save') + '''</button>
+                        <hr class=\"main_hr\">
+                        <span>''' + load_lang('http_warring') + '''</span>
+                    </form>
+                    ''',
+            menu = [['user', load_lang('return')]]
+        ))

+ 92 - 0
route/upload.py

@@ -0,0 +1,92 @@
+from .tool.func import *
+
+def upload_2(conn):
+    curs = conn.cursor()
+
+    if ban_check() == 1:
+        return re_error('/ban')
+    
+    if flask.request.method == 'POST':
+        if captcha_post(flask.request.form.get('g-recaptcha-response', '')) == 1:
+            return re_error('/error/13')
+        else:
+            captcha_post('', 0)
+
+        data = flask.request.files.get('f_data', None)
+        if not data:
+            return re_error('/error/9')
+
+        if int(wiki_set(3)) * 1024 * 1024 < flask.request.content_length:
+            return re_error('/error/17')
+        
+        value = os.path.splitext(data.filename)[1]
+        if not value in ['.jpeg', '.jpg', '.gif', '.png', '.webp', '.JPEG', '.JPG', '.GIF', '.PNG', '.WEBP']:
+            return re_error('/error/14')
+    
+        if flask.request.form.get('f_name', None):
+            name = flask.request.form.get('f_name', None) + value
+        else:
+            name = data.filename
+        
+        piece = os.path.splitext(name)
+        if re.search('[^ㄱ-힣0-9a-zA-Z_\- ]', piece[0]):
+            return re_error('/error/22')
+
+        e_data = sha224(piece[0]) + piece[1]
+
+        curs.execute("select title from data where title = ?", ['file:' + name])
+        if curs.fetchall():
+            return re_error('/error/16')
+            
+        ip = ip_check()
+
+        if flask.request.form.get('f_lice', None):
+            lice = flask.request.form.get('f_lice', None)
+        else:
+            if custom()[2] == 0:
+                lice = ip
+            else:
+                lice = '[[user:' + ip + ']]'
+            
+        if os.path.exists(os.path.join(app_var['path_data_image'], e_data)):
+            os.remove(os.path.join(app_var['path_data_image'], e_data))
+            
+            data.save(os.path.join(app_var['path_data_image'], e_data))
+        else:
+            data.save(os.path.join(app_var['path_data_image'], e_data))
+            
+        curs.execute("select title from data where title = ?", ['file:' + name])
+        if curs.fetchall(): 
+            curs.execute("delete from data where title = ?", ['file:' + name])
+        
+        curs.execute("insert into data (title, data) values (?, ?)", ['file:' + name, '[[file:' + name + ']][br][br]{{{[[file:' + name + ']]}}}[br][br]' + lice])
+        curs.execute("insert into acl (title, dec, dis, why, view) values (?, 'admin', '', '', '')", ['file:' + name])
+
+        history_plus(
+            'file:' + name, '[[file:' + name + ']][br][br]{{{[[file:' + name + ']]}}}[br][br]' + lice,
+            get_time(), 
+            ip, 
+            '(upload)',
+            '0'
+        )
+        
+        conn.commit()
+        
+        return redirect('/w/file:' + name)      
+    else:
+        return easy_minify(flask.render_template(skin_check(), 
+            imp = [load_lang('upload'), wiki_set(), custom(), other2([0, 0])],
+            data =  '''
+                    <form method="post" enctype="multipart/form-data" accept-charset="utf8">
+                        <input type="file" name="f_data">
+                        <hr class=\"main_hr\">
+                        <input placeholder="''' + load_lang('name') + '''" name="f_name" type="text">
+                        <hr class=\"main_hr\">
+                        <input placeholder="''' + load_lang('license') + '''" name="f_lice" type="text">
+                        <hr class=\"main_hr\">
+                        ''' + captcha_get() + '''
+                        <button id="save" type="submit">''' + load_lang('save') + '''</button>
+                    </form>
+                    ''',
+            menu = [['other', load_lang('return')]]
+        ))  

+ 66 - 0
route/user_admin.py

@@ -0,0 +1,66 @@
+from .tool.func import *
+
+def user_admin_2(conn, name):
+    curs = conn.cursor()
+
+    owner = admin_check()
+    
+    curs.execute("select acl from user where id = ?", [name])
+    user = curs.fetchall()
+    if not user:
+        return re_error('/error/2')
+    else:
+        if owner != 1:
+            curs.execute('select name from alist where name = ? and acl = "owner"', [user[0][0]])
+            if curs.fetchall():
+                return re_error('/error/3')
+
+            if ip_check() == name:
+                return re_error('/error/3')
+
+    if flask.request.method == 'POST':
+        if admin_check(7, 'admin (' + name + ')') != 1:
+            return re_error('/error/3')
+
+        if owner != 1:
+            curs.execute('select name from alist where name = ? and acl = "owner"', [flask.request.form.get('select', None)])
+            if curs.fetchall():
+                return re_error('/error/3')
+
+        if flask.request.form.get('select', None) == 'X':
+            curs.execute("update user set acl = 'user' where id = ?", [name])
+        else:
+            curs.execute("update user set acl = ? where id = ?", [flask.request.form.get('select', None), name])
+        
+        conn.commit()
+        
+        return redirect('/admin/' + url_pas(name))            
+    else:
+        if admin_check(7) != 1:
+            return re_error('/error/3')            
+
+        div = '<option value="X">X</option>'
+        
+        curs.execute('select distinct name from alist order by name asc')
+        for data in curs.fetchall():
+            if user[0][0] == data[0]:
+                div += '<option value="' + data[0] + '" selected="selected">' + data[0] + '</option>'
+            else:
+                if owner != 1:
+                    curs.execute('select name from alist where name = ? and acl = "owner"', [data[0]])
+                    if not curs.fetchall():
+                        div += '<option value="' + data[0] + '">' + data[0] + '</option>'
+                else:
+                    div += '<option value="' + data[0] + '">' + data[0] + '</option>'
+        
+        return easy_minify(flask.render_template(skin_check(), 
+            imp = [name, wiki_set(), custom(), other2([' (' + load_lang('authorize') + ')', 0])],
+            data =  '''
+                    <form method="post">
+                        <select name="select">''' + div + '''</select>
+                        <hr class=\"main_hr\">
+                        <button type="submit">''' + load_lang('save') + '''</button>
+                    </form>
+                    ''',
+            menu = [['manager', load_lang('return')]]
+        ))

+ 82 - 0
route/user_ban.py

@@ -0,0 +1,82 @@
+from .tool.func import *
+
+def user_ban_2(conn, name):
+    curs = conn.cursor()
+
+    if ip_or_user(name) == 0:
+        curs.execute("select acl from user where id = ?", [name])
+        user = curs.fetchall()
+        if not user:
+            return re_error('/error/2')
+
+        if user and user[0][0] != 'user':
+            if admin_check() != 1:
+                return re_error('/error/4')
+
+    if ban_check(ip = ip_check(), tool = 'login') == 1:
+        return re_error('/ban')
+                
+    if flask.request.method == 'POST':
+        if admin_check(1, 'ban (' + name + ')') != 1:
+            return re_error('/error/3')
+
+        if flask.request.form.get('limitless', '') == '':
+            end = flask.request.form.get('second', '0')
+        else:
+            end = '0'
+
+        ban_insert(name, end, flask.request.form.get('why', ''), flask.request.form.get('login', ''), ip_check())
+
+        return redirect('/ban/' + url_pas(name))     
+    else:
+        if admin_check(1) != 1:
+            return re_error('/error/3')
+
+        curs.execute("select end, why from ban where block = ?", [name])
+        end = curs.fetchall()
+        if end:
+            now = load_lang('release')
+
+            if end[0][0] == '':
+                data = '<ul><li>' + load_lang('limitless') + '</li>'
+            else:
+                data = '<ul><li>' + load_lang('period') + ' : ' + end[0][0] + '</li>'
+                
+            curs.execute("select block from ban where block = ? and login = 'O'", [name])
+            if curs.fetchall():
+                data += '<li>' + load_lang('login_able') + '</li>'
+
+            if end[0][1] != '':
+                data += '<li>' + load_lang('why') + ' : ' + end[0][1] + '</li></ul><hr class=\"main_hr\">'
+            else:
+                data += '</ul><hr class=\"main_hr\">'
+        else:
+            if re.search("^([0-9]{1,3}\.[0-9]{1,3})$", name):
+                now = load_lang('band_ban')
+            else:
+                now = load_lang('ban')
+                
+            if ip_or_user(name) == 1:
+                plus = '<input type="checkbox" name="login"> ' + load_lang('login_able') + '<hr class=\"main_hr\">'
+            else:
+                plus = ''
+
+            data =  '''
+                    <input placeholder="''' + load_lang('second') + '''" name="second" type="text">
+                    <hr class=\"main_hr\">
+                    <input type="checkbox" name="limitless"> ''' + load_lang('limitless') + '''
+                    <hr class=\"main_hr\">
+                    <input placeholder="''' + load_lang('why') + '''" name="why" type="text">
+                    <hr class=\"main_hr\">
+                    ''' + plus
+
+        return easy_minify(flask.render_template(skin_check(), 
+            imp = [name, wiki_set(), custom(), other2([' (' + now + ')', 0])],
+            data =  '''
+                    <form method="post">
+                        ''' + data + '''
+                        <button type="submit">''' + now + '''</button>
+                    </form>
+                    ''',
+            menu = [['manager', load_lang('return')]]
+        ))   

+ 92 - 0
route/user_check.py

@@ -0,0 +1,92 @@
+from .tool.func import *
+
+def user_check_2(conn, name):
+    curs = conn.cursor()
+
+    curs.execute("select acl from user where id = ? or id = ?", [name, flask.request.args.get('plus', '-')])
+    user = curs.fetchall()
+    if user and user[0][0] != 'user':
+        if admin_check() != 1:
+            return re_error('/error/4')
+
+    if admin_check(4, 'check (' + name + ')') != 1:
+        return re_error('/error/3')
+        
+    num = int(number_check(flask.request.args.get('num', '1')))
+    if num * 50 > 0:
+        sql_num = num * 50 - 50
+    else:
+        sql_num = 0
+    
+    if flask.request.args.get('plus', None):
+        end_check = 1
+    
+        if ip_or_user(name) == 1:
+            if ip_or_user(flask.request.args.get('plus', None)) == 1:
+                curs.execute("select name, ip, ua, today from ua_d where ip = ? or ip = ? order by today desc limit ?, '50'", [name, flask.request.args.get('plus', None), sql_num])
+            else:
+                curs.execute("select name, ip, ua, today from ua_d where ip = ? or name = ? order by today desc limit ?, '50'", [name, flask.request.args.get('plus', None), sql_num])
+        else:
+            if ip_or_user(flask.request.args.get('plus', None)) == 1:
+                curs.execute("select name, ip, ua, today from ua_d where name = ? or ip = ? order by today desc limit ?, '50'", [name, flask.request.args.get('plus', None), sql_num])
+            else:
+                curs.execute("select name, ip, ua, today from ua_d where name = ? or name = ? order by today desc limit ?, '50'", [name, flask.request.args.get('plus', None), sql_num])
+    else:
+        end_check = 0
+        
+        if ip_or_user(name) == 1:
+            curs.execute("select name, ip, ua, today from ua_d where ip = ? order by today desc limit ?, '50'", [name, sql_num])
+        else:
+            curs.execute("select name, ip, ua, today from ua_d where name = ? order by today desc limit ?, '50'", [name, sql_num])
+    
+    record = curs.fetchall()
+    if record:
+        if not flask.request.args.get('plus', None):
+            div = '<a href="/manager/14?plus=' + url_pas(name) + '">(' + load_lang('compare') + ')</a><hr class=\"main_hr\">'
+        else:
+            div = '<a href="/check/' + url_pas(name) + '">(' + name + ')</a> <a href="/check/' + url_pas(flask.request.args.get('plus', None)) + '">(' + flask.request.args.get('plus', None) + ')</a><hr class=\"main_hr\">'
+
+        div +=  '''
+                <table id="main_table_set">
+                    <tbody>
+                        <tr>
+                            <td id="main_table_width">''' + load_lang('name') + '''</td>
+                            <td id="main_table_width">ip</td>
+                            <td id="main_table_width">''' + load_lang('time') + '''</td>
+                        </tr>
+                '''
+        
+        for data in record:
+            if data[2]:
+                ua = data[2]
+            else:
+                ua = '<br>'
+
+            div +=  '''
+                    <tr>
+                        <td>''' + ip_pas(data[0]) + '''</td>
+                        <td>''' + ip_pas(data[1]) + '''</td>
+                        <td>''' + data[3] + '''</td>
+                    </tr>
+                    <tr>
+                        <td colspan="3">''' + ua + '''</td>
+                    </tr>
+                    '''
+        
+        div +=  '''
+                    </tbody>
+                </table>
+                '''
+    else:
+        return re_error('/error/2')
+        
+    if end_check == 1:
+        div += next_fix('/check/' + url_pas(name) + '?plus=' + flask.request.args.get('plus', None) + '&num=', num, record)
+    else:
+        div += next_fix('/check/' + url_pas(name) + '?num=', num, record)
+            
+    return easy_minify(flask.render_template(skin_check(),    
+        imp = [load_lang('check'), wiki_set(), custom(), other2([0, 0])],
+        data = div,
+        menu = [['manager', load_lang('return')]]
+    ))

+ 101 - 0
route/user_info.py

@@ -0,0 +1,101 @@
+from .tool.func import *
+
+def user_info_2(conn):
+    curs = conn.cursor()
+
+    ip = ip_check()
+    
+    curs.execute("select acl from user where id = ?", [ip])
+    data = curs.fetchall()
+    if ban_check() == 0:
+        if data:
+            if data[0][0] != 'user':
+                acl = data[0][0]
+            else:
+                acl = load_lang('member')
+        else:
+            acl = load_lang('normal')
+    else:
+        acl = load_lang('blocked')
+
+        match = re.search("^([0-9]{1,3}\.[0-9]{1,3})", ip)
+        if match:
+            match = match.groups()[0]
+        else:
+            match = '-'
+
+        curs.execute("select end, login, band from ban where block = ? or block = ?", [ip, match])
+        block_data = curs.fetchall()
+        if block_data:
+            if block_data[0][0] != '':
+                acl += ' (' + load_lang('period') + ' : ' + block_data[0][0] + ')'
+            else:
+                acl += ' (' + load_lang('limitless') + ')'        
+
+            if block_data[0][1] != '':
+                acl += ' (' + load_lang('login_able') + ')'
+
+            if block_data[0][2] == 'O':
+                acl += ' (' + load_lang('band_blocked') + ')'
+            
+    if custom()[2] != 0:
+        ip_user = '<a href="/w/user:' + ip + '">' + ip + '</a>'
+        
+        plus =  '''
+                <li><a href="/logout">''' + load_lang('logout') + '''</a></li>
+                <li><a href="/change">''' + load_lang('user_setting') + '''</a></li>
+                '''
+        
+        curs.execute('select name from alarm where name = ? limit 1', [ip_check()])
+        if curs.fetchall():
+            plus2 = '<li><a href="/alarm">' + load_lang('alarm') + ' (O)</a></li>'
+        else:
+            plus2 = '<li><a href="/alarm">' + load_lang('alarm') + '</a></li>'
+
+        plus2 += '<li><a href="/watch_list">' + load_lang('watchlist') + '</a></li>'
+        plus3 = '<li><a href="/acl/user:' + url_pas(ip) + '">' + load_lang('user_document_acl') + '</a></li>'
+    else:
+        ip_user = ip
+        
+        plus =  '''
+                <li><a href="/login">''' + load_lang('login') + '''</a></li>
+                <li><a href="/register">''' + load_lang('register') + '''</a></li>
+                '''
+        plus2 = ''
+        plus3 = ''
+
+        curs.execute("select data from other where name = 'email_have'")
+        test = curs.fetchall()
+        if test and test[0][0] != '':
+            plus += '<li><a href="/pass_find">' + load_lang('password_search') + '</a></li>'
+
+    return easy_minify(flask.render_template(skin_check(), 
+        imp = [load_lang('user') + ' ' + load_lang('tool'), wiki_set(), custom(), other2([0, 0])],
+        data =  '''
+                <h2>''' + load_lang('state') + '''</h2>
+                <ul>
+                    <li>''' + ip_user + ''' <a href="/record/''' + url_pas(ip) + '''">(''' + load_lang('record') + ''')</a></li>
+                    <li>''' + load_lang('state') + ''' : ''' + acl + '''</li>
+                </ul>
+                <br>
+                <h2>''' + load_lang('login') + '''</h2>
+                <ul>
+                    ''' + plus + '''
+                </ul>
+                <br>
+                <h2>''' + load_lang('tool') + '''</h2>
+                <ul>
+                    ''' + plus3 + '''
+                    <li><a href="/custom_head">''' + load_lang('user_head') + '''</a></li>
+                </ul>
+                <br>
+                <h2>''' + load_lang('other') + '''</h2>
+                <ul>
+                ''' + plus2 + '''
+                <li>
+                    <a href="/count">''' + load_lang('count') + '''</a>
+                </li>
+                </ul>
+                ''',
+        menu = 0
+    ))

+ 55 - 0
route/user_topic_list.py

@@ -0,0 +1,55 @@
+from .tool.func import *
+
+def user_topic_list_2(conn, name):
+    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
+    
+    one_admin = admin_check(1)
+
+    div =   '''
+            <table id="main_table_set">
+                <tbody>
+                    <tr>
+                        <td id="main_table_width">''' + load_lang('discussion_name') + '''</td>
+                        <td id="main_table_width">''' + load_lang('writer') + '''</td>
+                        <td id="main_table_width">''' + load_lang('time') + '''</td>
+                    </tr>
+            '''
+    
+    curs.execute("select title, id, sub, ip, date from topic where ip = ? order by date desc limit ?, '50'", [name, str(sql_num)])
+    data_list = curs.fetchall()
+    for data in data_list:
+        title = html.escape(data[0])
+        sub = html.escape(data[2])
+        
+        if one_admin == 1:
+            curs.execute("select * from ban where block = ?", [data[3]])
+            if curs.fetchall():
+                ban = ' <a href="/ban/' + url_pas(data[3]) + '">(' + load_lang('release') + ')</a>'
+            else:
+                ban = ' <a href="/ban/' + url_pas(data[3]) + '">(' + load_lang('ban') + ')</a>'
+        else:
+            ban = ''
+            
+        div += '<tr><td><a href="/topic/' + url_pas(data[0]) + '/sub/' + url_pas(data[2]) + '#' + data[1] + '">' + title + '#' + data[1] + '</a> (' + sub + ')</td>'
+        div += '<td>' + ip_pas(data[3]) + ban + '</td><td>' + data[4] + '</td></tr>'
+
+    div += '</tbody></table>'
+    div += next_fix('/topic_record/' + url_pas(name) + '?num=', num, data_list)      
+    
+    curs.execute("select end from ban where block = ?", [name])
+    if curs.fetchall():
+        sub = ' (' + load_lang('blocked') + ')'
+    else:
+        sub = 0 
+    
+    return easy_minify(flask.render_template(skin_check(), 
+        imp = [load_lang('discussion_record'), wiki_set(), custom(), other2([sub, 0])],
+        data = div,
+        menu = [['other', load_lang('other')], ['user', load_lang('user')], ['count/' + url_pas(name), load_lang('count')], ['record/' + url_pas(name), load_lang('record')]]
+    ))

+ 25 - 0
route/watch_list.py

@@ -0,0 +1,25 @@
+from .tool.func import *
+
+def watch_list_2(conn):
+    curs = conn.cursor()
+
+    div = 'limit : 10<hr class=\"main_hr\">'
+    
+    if custom()[2] == 0:
+        return redirect('/login')
+
+    curs.execute("select title from scan where user = ?", [ip_check()])
+    data = curs.fetchall()
+    for data_list in data:
+        div += '<li><a href="/w/' + url_pas(data_list[0]) + '">' + data_list[0] + '</a> <a href="/watch_list/' + url_pas(data_list[0]) + '">(' + load_lang('delete') + ')</a></li>'
+
+    if data:
+        div = '<ul>' + div + '</ul><hr class=\"main_hr\">'
+
+    div += '<a href="/manager/13">(' + load_lang('add') + ')</a>'
+
+    return easy_minify(flask.render_template(skin_check(), 
+        imp = [load_lang('watchlist'), wiki_set(), custom(), other2([0, 0])],
+        data = div,
+        menu = [['manager', load_lang('return')]]
+    ))

+ 24 - 0
route/watch_list_name.py

@@ -0,0 +1,24 @@
+from .tool.func import *
+
+def watch_list_name_2(conn, name):
+    curs = conn.cursor()
+    
+    if custom()[2] == 0:
+        return redirect('/login')
+
+    ip = ip_check()
+
+    curs.execute("select count(title) from scan where user = ?", [ip])
+    count = curs.fetchall()
+    if count and count[0][0] > 9:
+        return redirect('/watch_list')
+
+    curs.execute("select title from scan where user = ? and title = ?", [ip, name])
+    if curs.fetchall():
+        curs.execute("delete from scan where user = ? and title = ?", [ip, name])
+    else:
+        curs.execute("insert into scan (user, title) values (?, ?)", [ip, name])
+    
+    conn.commit()
+
+    return redirect('/watch_list')

Vissa filer visades inte eftersom för många filer har ändrats