'
i = 0
curs.execute("select title, acl from data where acl = 'admin' or acl = 'user' order by acl desc")
list_data = curs.fetchall()
if(list_data):
for data in list_data:
if(data['acl'] == 'admin'):
acl = '관리자'
else:
acl = '로그인'
div += '
'
else:
div = '(새로 생성)'
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), logo = set_data['name'], data = div, title = 'ACL 목록'))
@route('/adminplus/', method=['POST', 'GET'])
def admin_plus(name = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
if(admin_check(None) == 1):
if(request.method == 'POST'):
curs.execute("delete from alist where name = '" + db_pas(name) + "'")
if(request.forms.ban):
curs.execute("insert into alist (name, acl) value ('" + db_pas(name) + "', 'ban')")
if(request.forms.mdel):
curs.execute("insert into alist (name, acl) value ('" + db_pas(name) + "', 'mdel')")
if(request.forms.toron):
curs.execute("insert into alist (name, acl) value ('" + db_pas(name) + "', 'toron')")
if(request.forms.check):
curs.execute("insert into alist (name, acl) value ('" + db_pas(name) + "', 'check')")
if(request.forms.acl):
curs.execute("insert into alist (name, acl) value ('" + db_pas(name) + "', 'acl')")
if(request.forms.hidel):
curs.execute("insert into alist (name, acl) value ('" + db_pas(name) + "', 'hidel')")
if(request.forms.owner):
curs.execute("insert into alist (name, acl) value ('" + db_pas(name) + "', 'owner')")
conn.commit()
conn.close()
return(redirect('/adminplus/admin'))
else:
curs.execute('select acl from alist where name = "' + db_pas(name) + '"')
test = curs.fetchall()
list = ''
exist_list = ['', '', '', '', '', '', '', '', '']
for go in test:
if(go['acl'] == 'ban'):
exist_list[0] = 'checked="checked"'
elif(go['acl'] == 'mdel'):
exist_list[1] = 'checked="checked"'
elif(go['acl'] == 'toron'):
exist_list[2] = 'checked="checked"'
elif(go['acl'] == 'check'):
exist_list[3] = 'checked="checked"'
elif(go['acl'] == 'acl'):
exist_list[4] = 'checked="checked"'
elif(go['acl'] == 'hidel'):
exist_list[5] = 'checked="checked"'
elif(go['acl'] == 'owner'):
exist_list[7] = 'checked="checked"'
list += '
차단
'
list += '
많은 문서 삭제
'
list += '
토론 관리
'
list += '
사용자 검사
'
list += '
문서 ACL
'
list += '
역사 숨김
'
list += '
소유자
'
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = '관리 그룹 추가', logo = set_data['name'], data = ''))
else:
conn.close()
return(redirect('/error/3'))
@route('/adminlist')
def admin_list():
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
i = 1
div = '
'
curs.execute("select * from user where acl = 'admin' or acl = 'owner'")
user_data = curs.fetchall()
if(user_data):
for data in user_data:
name = ip_pas(data['id'], 2)
name += ' (' + data['acl'] + ')'
div += '
' + str(i) + '. ' + name + '
'
i += 1
else:
div += '
'
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), logo = set_data['name'], data = div, title = '관리자 목록'))
else:
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), logo = set_data['name'], title = '관리자 목록'))
@route('/recentchanges')
def recentchanges():
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
ydmin = admin_check(1)
zdmin = admin_check(6)
div = '
문서명
기여자
시간
'
curs.execute("select id, title, date, ip, send, leng from history order by date desc limit 50")
rows = curs.fetchall()
if(rows):
for data in rows:
if(data['send']):
if(re.search("^(?: *)$", data['send'])):
send = ' '
else:
send = data['send']
else:
send = ' '
title = data['title']
title = re.sub('<', '<', title)
title = re.sub('>', '>', title)
title = re.sub('"', '"', title)
m = re.search("\+", data['leng'])
n = re.search("\-", data['leng'])
if(m):
leng = '' + data['leng'] + ''
elif(n):
leng = '' + data['leng'] + ''
else:
leng = '' + data['leng'] + ''
if(ydmin == 1):
curs.execute("select * from ban where block = '" + db_pas(data['ip']) + "'")
row = curs.fetchall()
if(row):
ban = ' (해제)'
else:
ban = ' (차단)'
else:
ban = ''
ip = ip_pas(data['ip'], None)
if((int(data['id']) - 1) == 0):
revert = ''
else:
revert = '(비교)(되돌리기)'
style = ''
if(zdmin == 1):
curs.execute("select * from hidhi where title = '" + db_pas(data['title']) + "' and re = '" + db_pas(data['id']) + "'")
row = curs.fetchall()
if(row):
ip += ' (숨김)'
hidden = ' (공개)'
else:
hidden = ' (숨김)'
else:
curs.execute("select * from hidhi where title = '" + db_pas(data['title']) + "' and re = '" + db_pas(data['id']) + "'")
row = curs.fetchall()
if(row):
ip = '숨김'
hidden = ''
send = '숨김'
ban = ''
style = 'display:none;'
else:
hidden = ''
div += '
'
else:
div = 'None '
div += ' (이전)(이후)'
curs.execute("select end, why from ban where block = '" + db_pas(name) + "'")
ban_it = curs.fetchall()
if(ban_it):
div = namumark('', '{{{#!wiki style="border:2px solid red;padding:10px;"\r\n{{{+2 {{{#red 이 사용자는 차단 당했습니다.}}}}}}\r\n\r\n차단 해제 일 : ' + ban_it[0]['end'] + '[br]사유 : ' + ban_it[0]['why'] + '}}}') + ' ' + div
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), logo = set_data['name'], data = div, title = '사용자 기록'))
@route('/userlog')
@route('/userlog/n/')
def user_log(num = 1):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
if(num * 50 <= 0):
i = 50
else:
i = num * 50
j = i - 50
list_data = ''
ydmin = admin_check(1)
curs.execute("select * from user limit " + str(j) + ", " + str(i))
user_list = curs.fetchall()
if(user_list):
for data in user_list:
if(ydmin == 1):
curs.execute("select * from ban where block = '" + db_pas(data['id']) + "'")
ban_exist = curs.fetchall()
if(ban_exist):
ban_button = ' (해제)'
else:
ban_button = ' (차단)'
else:
ban_button = ''
ip = ip_pas(data['id'], None)
list_data += '
' + str(j + 1) + '. ' + ip + ban_button + '
'
j += 1
list_data += ' (이전)(이후)'
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), logo = set_data['name'], data = list_data, title = '사용자 가입 기록'))
else:
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), logo = set_data['name'], data = '', title = '사용자 가입 기록'))
@route('/backreset')
def xref_reset():
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
if(admin_check(None) == 1):
i = 0
curs.execute("delete from back")
conn.commit()
curs.execute("select title, data from data")
all = curs.fetchall()
if(all):
for data in all:
namumark(data['title'], data['data'])
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), logo = set_data['name'], data = '에러 없음', title = '완료'))
else:
conn.close()
return(redirect('/error/3'))
@route('/xref/')
@route('/xref//n/')
def xref(name = None, num = 1):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
if(num * 50 <= 0):
v = 50
else:
v = num * 50
i = v - 50
div = ''
restart = 0
curs.execute("delete from back where title = '" + db_pas(name) + "' and link = ''")
conn.commit()
curs.execute("select * from back where title = '" + db_pas(name) + "' order by link asc")
rows = curs.fetchall()
if(rows):
for data in rows:
if(data['type'] == 'include' or data['type'] == 'file'):
curs.execute("select * from back where title = '" + db_pas(name) + "' and link = '" + db_pas(data['link']) + "' and type = ''")
test = curs.fetchall()
if(test):
restart = 1
curs.execute("delete from back where title = '" + db_pas(name) + "' and link = '" + db_pas(data['link']) + "' and type = ''")
conn.commit()
if(not re.search('^사용자:', data['link'])):
curs.execute("select * from data where title = '" + db_pas(data['link']) + "'")
row = curs.fetchall()
if(row):
test = row[0]['data']
test = re.sub("(?P\[include\((?P(?:(?!\)\]|,).)*)((?:,\s?(?:[^)]*))+)?\)\])", "\g\n\n[[\g]]\n\n", test)
test = re.sub("\[\[파일:(?P(?:(?!\]\]|\|).)*)(?:\|((?:(?!\]\]).)*))?\]\]", "\n\n[[:파일:\g]]\n\n", test)
test = re.sub('^#(?:redirect|넘겨주기)\s(?P[^\n]*)', '[[\g]]', test)
test = namumark('', test)
if(re.search(").)*)?>([^<]*)<\/a>", test)):
div += '
'
else:
div += ''
else:
curs.execute("delete from back where title = '" + db_pas(name) + "' and link = '" + db_pas(data['link']) + "'")
conn.commit()
i += 1
v += 1
else:
curs.execute("delete from back where title = '" + db_pas(name) + "' and link = '" + db_pas(data['link']) + "'")
conn.commit()
i += 1
v += 1
else:
curs.execute("delete from back where title = '" + db_pas(name) + "' and link = '" + db_pas(data['link']) + "'")
conn.commit()
i += 1
v += 1
if(restart == 1):
conn.close()
return(redirect('/xref/' + url_pas(name) + '/n/' + str(num)))
else:
div += ' (이전)(이후)'
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), logo = set_data['name'], data = div, title = name, page = url_pas(name), sub = '역링크'))
else:
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), logo = set_data['name'], data = 'None', title = name, page = url_pas(name), sub = '역링크'))
@route('/recentdiscuss')
def recentdiscuss():
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
div = '
토론명
시간
'
curs.execute("select * from rd order by date desc limit 50")
rows = curs.fetchall()
if(rows):
for data in rows:
title = data['title']
title = re.sub('<', '<', title)
title = re.sub('>', '>', title)
title = re.sub('"', '"', title)
sub = data['sub']
sub = re.sub('<', '<', sub)
sub = re.sub('>', '>', sub)
sub = re.sub('"', '"', sub)
div += '
'
else:
div = 'None '
div += ' (이전)(이후)'
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), logo = set_data['name'], data = div, title = name, page = url_pas(name), select = select, sub = '역사'))
@route('/search', method=['POST'])
def search():
return(redirect('/search/' + url_pas(request.forms.search)))
@route('/goto', method=['POST'])
def goto():
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
curs.execute("select title from data where title = '" + db_pas(request.forms.search) + "'")
data = curs.fetchall()
conn.close()
if(data):
return(redirect('/w/' + url_pas(request.forms.search)))
else:
return(redirect('/search/' + url_pas(request.forms.search)))
@route('/search/')
@route('/search//n/')
def deep_search(name = None, num = 1):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
if(num * 50 <= 0):
v = num * 50
else:
v = 50
i = v - 50
div = ''
div_plus = ''
end = ''
curs.execute("select title from data where title like '%" + db_pas(name) + "%'")
title_list = curs.fetchall()
curs.execute("select title from data where data like '%" + db_pas(name) + "%'")
data_list = curs.fetchall()
curs.execute("select title from data where title = '" + db_pas(name) + "'")
exist = curs.fetchall()
if(exist):
div = '
'
else:
data = 'None'
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), logo = set_data['name'], data = data, title = '모든 문서'))
@route('/topic//sub//b/')
def topic_block(name = None, sub = None, num = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
if(admin_check(3) == 1):
curs.execute("select * from topic where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' and id = '" + str(num) + "'")
block = curs.fetchall()
if(block):
if(block[0]['block'] == 'O'):
curs.execute("update topic set block = '' where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' and id = '" + str(num) + "'")
else:
curs.execute("update topic set block = 'O' where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' and id = '" + str(num) + "'")
conn.commit()
rd_plus(name, sub, get_time())
conn.close()
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
conn.close()
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
conn.close()
return(redirect('/error/3'))
@route('/topic//sub//notice/')
def topic_top(name = None, sub = None, num = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
if(admin_check(3) == 1):
curs.execute("select * from topic where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' and id = '" + str(num) + "'")
topic_data = curs.fetchall()
if(topic_data):
curs.execute("select * from topic where id = '" + str(num) + "' and title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "'")
top_data = curs.fetchall()
if(top_data):
if(top_data[0]['top'] == 'O'):
curs.execute("update topic set top = '' where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' and id = '" + str(num) + "'")
else:
curs.execute("update topic set top = 'O' where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' and id = '" + str(num) + "'")
conn.commit()
rd_plus(name, sub, get_time())
conn.close()
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
conn.close()
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
conn.close()
return(redirect('/error/3'))
@route('/topic//sub//stop')
def topic_stop(name = None, sub = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
if(admin_check(3) == 1):
ip = ip_check()
curs.execute("select * from topic where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' order by id + 0 desc limit 1")
topic_check = curs.fetchall()
if(topic_check):
time = get_time()
curs.execute("select * from stop where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' and close = ''")
stop = curs.fetchall()
if(stop):
curs.execute("insert into topic (id, title, sub, data, date, ip, block, top) value ('" + db_pas(str(int(topic_check[0]['id']) + 1)) + "', '" + db_pas(name) + "', '" + db_pas(sub) + "', '토론 재 시작', '" + db_pas(time) + "', '" + db_pas(ip) + "', '', '1')")
curs.execute("delete from stop where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' and close = ''")
else:
curs.execute("insert into topic (id, title, sub, data, date, ip, block, top) value ('" + db_pas(str(int(topic_check[0]['id']) + 1)) + "', '" + db_pas(name) + "', '" + db_pas(sub) + "', '토론 정지', '" + db_pas(time) + "', '" + db_pas(ip) + "', '', '1')")
curs.execute("insert into stop (title, sub, close) value ('" + db_pas(name) + "', '" + db_pas(sub) + "', '')")
conn.commit()
rd_plus(name, sub, time)
conn.close()
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
conn.close()
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
conn.close()
return(redirect('/error/3'))
@route('/topic//sub//close')
def topic_close(name = None, sub = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
if(admin_check(3) == 1):
ip = ip_check()
curs.execute("select * from topic where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' order by id + 0 desc limit 1")
topic_check = curs.fetchall()
if(topic_check):
time = get_time()
curs.execute("select * from stop where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' and close = 'O'")
close = curs.fetchall()
if(close):
curs.execute("insert into topic (id, title, sub, data, date, ip, block, top) value ('" + db_pas(str(int(topic_check[0]['id']) + 1)) + "', '" + db_pas(name) + "', '" + db_pas(sub) + "', '토론 다시 열기', '" + db_pas(time) + "', '" + db_pas(ip) + "', '', '1')")
curs.execute("delete from stop where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' and close = 'O'")
else:
curs.execute("insert into topic (id, title, sub, data, date, ip, block, top) value ('" + db_pas(str(int(topic_check[0]['id']) + 1)) + "', '" + db_pas(name) + "', '" + db_pas(sub) + "', '토론 닫음', '" + db_pas(time) + "', '" + db_pas(ip) + "', '', '1')")
curs.execute("insert into stop (title, sub, close) value ('" + db_pas(name) + "', '" + db_pas(sub) + "', 'O')")
conn.commit()
rd_plus(name, sub, time)
conn.close()
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
conn.close()
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
conn.close()
return(redirect('/error/3'))
@route('/topic//sub//agree')
def topic_agree(name = None, sub = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
if(admin_check(3) == 1):
ip = ip_check()
curs.execute("select id from topic where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' order by id + 0 desc limit 1")
topic_check = curs.fetchall()
if(topic_check):
time = get_time()
curs.execute("select * from agreedis where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "'")
agree = curs.fetchall()
if(agree):
curs.execute("insert into topic (id, title, sub, data, date, ip, block, top) value ('" + db_pas(str(int(topic_check[0]['id']) + 1)) + "', '" + db_pas(name) + "', '" + db_pas(sub) + "', '합의 결렬', '" + db_pas(time) + "', '" + db_pas(ip) + "', '', '1')")
curs.execute("delete from agreedis where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "'")
else:
curs.execute("insert into topic (id, title, sub, data, date, ip, block, top) value ('" + db_pas(str(int(topic_check[0]['id']) + 1)) + "', '" + db_pas(name) + "', '" + db_pas(sub) + "', '합의 완료', '" + db_pas(time) + "', '" + db_pas(ip) + "', '', '1')")
curs.execute("insert into agreedis (title, sub) value ('" + db_pas(name) + "', '" + db_pas(sub) + "')")
conn.commit()
rd_plus(name, sub, time)
conn.close()
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
conn.close()
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
conn.close()
return(redirect('/error/3'))
@route('/topic//sub/', method=['POST', 'GET'])
def topic(name = None, sub = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
ip = ip_check()
ban = topic_check(ip, name, sub)
admin = admin_check(3)
if(request.method == 'POST'):
curs.execute("select id from topic where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' order by id + 0 desc limit 1")
rows = curs.fetchall()
if(rows):
num = int(rows[0]['id']) + 1
else:
num = 1
if(ban == 1 and not admin == 1):
conn.close()
return(redirect('/ban'))
else:
today = get_time()
rd_plus(name, sub, today)
aa = re.sub("\[\[(분류:(?:(?:(?!\]\]).)*))\]\]", "[br]", request.forms.content)
aa = savemark(aa)
curs.execute("insert into topic (id, title, sub, data, date, ip, block, top) value ('" + str(num) + "', '" + db_pas(name) + "', '" + db_pas(sub) + "', '" + db_pas(aa) + "', '" + today + "', '" + ip + "', '', '')")
conn.commit()
conn.close()
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
style = ''
curs.execute("select * from stop where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' and close = 'O'")
close = curs.fetchall()
curs.execute("select * from stop where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' and close = ''")
stop = curs.fetchall()
if(admin == 1):
div = '
'
if(close):
div += '(토론 열기) '
else:
div += '(토론 닫기) '
if(stop):
div += '(토론 재개) '
else:
div += '(토론 정지) '
curs.execute("select * from agreedis where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "'")
agree = curs.fetchall()
if(agree):
div += '(합의 취소)'
else:
div += '(합의 완료)'
div += '
'
else:
div = '
'
if(stop or close):
if(not admin == 1):
style = 'display:none;'
curs.execute("select * from topic where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' order by id + 0 asc")
toda = curs.fetchall()
curs.execute("select * from topic where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "' and top = 'O' order by id + 0 asc")
top = curs.fetchall()
if(top):
for dain in top:
top_data = namumark('', dain['data'])
top_data = re.sub("(?P#(?:[0-9]*))", '\g', top_data)
ip = ip_pas(dain['ip'], 1)
div += '
'
i += 1
conn.close()
return(template('vstopic', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = name, page = url_pas(name), suburl = url_pas(sub), toron = sub, logo = set_data['name'], rows = div, ban = ban, style = style, sub = '토론'))
@route('/topic//close')
def close_topic_list(name = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
div = '
'
i = 0
curs.execute("select * from stop where title = '" + db_pas(name) + "' and close = 'O' order by sub asc")
rows = curs.fetchall()
for data in rows:
curs.execute("select * from topic where title = '" + db_pas(name) + "' and sub = '" + db_pas(data['sub']) + "' and id = '1'")
row = curs.fetchall()
if(row):
indata = namumark(name, row[0]['data'])
if(row[0]['block'] == 'O'):
indata = '블라인드 되었습니다.'
block = 'id="block"'
else:
block = ''
ip = ip_pas(row[0]['ip'], 1)
div += '
'
conn.close()
return(template('topic', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = name, page = url_pas(name), logo = set_data['name'], plus = div, sub = '닫힘'))
@route('/topic//agree')
def agree_topic_list(name = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
div = '
'
i = 0
curs.execute("select * from agreedis where title = '" + db_pas(name) + "' order by sub asc")
agree_list = curs.fetchall()
for data in agree_list:
curs.execute("select * from topic where title = '" + db_pas(name) + "' and sub = '" + db_pas(data['sub']) + "' and id = '1'")
topic_data = curs.fetchall()
if(topic_data):
indata = namumark(name, topic_data[0]['data'])
if(topic_data[0]['block'] == 'O'):
indata = '블라인드 되었습니다.'
block = 'id="block"'
else:
block = ''
ip = ip_pas(topic_data[0]['ip'], 1)
div += '
'
conn.close()
return(template('topic', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = name, page = url_pas(name), logo = set_data['name'], plus = div, sub = '합의'))
@route('/topic/', method=['POST', 'GET'])
def topic_list(name = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
if(request.method == 'POST'):
conn.close()
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(request.forms.topic)))
else:
div = '
'
j = 1
curs.execute("select * from rd where title = '" + db_pas(name) + "' order by date asc")
rows = curs.fetchall()
for data in rows:
curs.execute("select * from topic where title = '" + db_pas(data['title']) + "' and sub = '" + db_pas(data['sub']) + "' and id = '1' order by sub asc")
aa = curs.fetchall()
indata = namumark(name, aa[0]['data'])
if(aa[0]['block'] == 'O'):
indata = '블라인드 되었습니다.'
block = 'id="block"'
else:
block = ''
ip = ip_pas(aa[0]['ip'], 1)
curs.execute("select * from stop where title = '" + db_pas(data['title']) + "' and sub = '" + db_pas(data['sub']) + "' and close = 'O'")
row = curs.fetchall()
if(not row):
div += '
'
conn.close()
return(template('topic', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = name, page = url_pas(name), logo = set_data['name'], plus = div, list = 1, sub = '토론 목록'))
@route('/login', method=['POST', 'GET'])
def login():
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
session = request.environ.get('beaker.session')
ip = ip_check()
ban = ban_check(ip)
if(request.method == 'POST'):
if(ban == 1):
conn.close()
return(redirect('/ban'))
else:
curs.execute("select * from user where id = '" + db_pas(request.forms.id) + "'")
user = curs.fetchall()
if(user):
if(session.get('Now') == True):
conn.close()
return(redirect('/error/11'))
elif(bcrypt.checkpw(bytes(request.forms.pw, 'utf-8'), bytes(user[0]['pw'], 'utf-8'))):
session['Now'] = True
session['DREAMER'] = request.forms.id
curs.execute("select * from custom where user = '" + db_pas(request.forms.id) + "'")
css_data = curs.fetchall()
if(css_data):
session['Daydream'] = css_data[0]['css']
else:
session['Daydream'] = ''
curs.execute("insert into login (user, ip, today) value ('" + db_pas(request.forms.id) + "', '" + db_pas(ip) + "', '" + db_pas(get_time()) + "')")
conn.commit()
conn.close()
return(redirect('/user'))
else:
conn.close()
return(redirect('/error/13'))
else:
conn.close()
return(redirect('/error/12'))
else:
if(ban == 1):
conn.close()
return(redirect('/ban'))
else:
if(session.get('Now') == True):
conn.close()
return(redirect('/error/11'))
else:
conn.close()
return(template('login', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = '로그인', enter = '로그인', logo = set_data['name']))
@route('/change', method=['POST', 'GET'])
def change_password():
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
ip = ip_check()
ban = ban_check(ip)
if(request.method == 'POST'):
if(request.forms.pw2 == request.forms.pw3):
if(ban == 1):
conn.close()
return(redirect('/ban'))
else:
curs.execute("select * from user where id = '" + db_pas(request.forms.id) + "'")
user = curs.fetchall()
if(user):
if(not re.search('\.', ip)):
conn.close()
return(redirect('/logout'))
elif(bcrypt.checkpw(bytes(request.forms.pw, 'utf-8'), bytes(user[0]['pw'], 'utf-8'))):
hashed = bcrypt.hashpw(bytes(request.forms.pw2, 'utf-8'), bcrypt.gensalt())
curs.execute("update user set pw = '" + db_pas(hashed.decode()) + "' where id = '" + db_pas(request.forms.id) + "'")
conn.commit()
conn.close()
return(redirect('/login'))
else:
conn.close()
return(redirect('/error/10'))
else:
conn.close()
return(redirect('/error/9'))
else:
conn.close()
return(redirect('/error/20'))
else:
if(ban == 1):
conn.close()
return(redirect('/ban'))
else:
if(not re.search('\.', ip)):
conn.close()
return(redirect('/logout'))
else:
conn.close()
return(template('login', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = '비밀번호 변경', enter = '변경', logo = set_data['name']))
@route('/check/')
def user_check(name = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
curs.execute("select * from user where id = '" + db_pas(name) + "'")
user = curs.fetchall()
if(user and not user[0]['acl'] == 'user'):
conn.close()
return(redirect('/error/4'))
else:
if(admin_check(4) == 1):
m = re.search('^(?:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}?)$', name)
if(m):
curs.execute("select * from login where ip = '" + db_pas(name) + "' order by today desc")
row = curs.fetchall()
if(row):
c = '
이름
아이피
언제
'
for data in row:
c += '
' + data['user'] + '
' + data['ip'] + '
' + data['today'] + '
'
else:
c += '
'
else:
c = 'None'
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = '다중 검사', logo = set_data['name'], data = c))
else:
curs.execute("select * from login where user = '" + db_pas(name) + "' order by today desc")
row = curs.fetchall()
if(row):
c = '
이름
아이피
언제
'
for data in row:
c += '
' + data['user'] + '
' + data['ip'] + '
' + data['today'] + '
'
else:
c += '
'
else:
c = 'None'
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = '다중 검사', logo = set_data['name'], data = c))
else:
conn.close()
return(redirect('/error/3'))
@route('/register', method=['POST', 'GET'])
def register():
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
ip = ip_check()
ban = ban_check(ip)
if(request.method == 'POST'):
if(request.forms.pw == request.forms.pw2):
if(ban == 1):
conn.close()
return(redirect('/ban'))
else:
m = re.search('(?:[^A-Za-zㄱ-힣0-9 ])', request.forms.id)
if(m):
conn.close()
return(redirect('/error/8'))
else:
if(len(request.forms.id) > 20):
conn.close()
return(redirect('/error/7'))
else:
curs.execute("select * from user where id = '" + db_pas(request.forms.id) + "'")
rows = curs.fetchall()
if(rows):
conn.close()
return(redirect('/error/6'))
else:
hashed = bcrypt.hashpw(bytes(request.forms.pw, 'utf-8'), bcrypt.gensalt())
curs.execute("select id from user limit 1")
user_ex = curs.fetchall()
if(not user_ex):
curs.execute("insert into user (id, pw, acl) value ('" + db_pas(request.forms.id) + "', '" + db_pas(hashed.decode()) + "', 'owner')")
else:
curs.execute("insert into user (id, pw, acl) value ('" + db_pas(request.forms.id) + "', '" + db_pas(hashed.decode()) + "', 'user')")
conn.commit()
conn.close()
return(redirect('/login'))
else:
conn.close()
return(redirect('/error/20'))
else:
if(ban == 1):
conn.close()
return(redirect('/ban'))
else:
conn.close()
return(template('login', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = '회원가입', enter = '회원가입', logo = set_data['name']))
@route('/logout')
def logout():
session = request.environ.get('beaker.session')
session['Now'] = False
session.pop('DREAMER', None)
return(redirect('/user'))
@route('/ban/', method=['POST', 'GET'])
def user_ban(name = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
curs.execute("select * from user where id = '" + db_pas(name) + "'")
user = curs.fetchall()
if(user and not user[0]['acl'] == 'user'):
conn.close()
return(redirect('/error/4'))
else:
if(request.method == 'POST'):
if(admin_check(1) == 1):
ip = ip_check()
if(not re.search("[0-9]{4}-[0-9]{2}-[0-9]{2}", request.forms.end)):
end = ''
else:
end = request.forms.end
curs.execute("select * from ban where block = '" + db_pas(name) + "'")
row = curs.fetchall()
if(row):
rb_plus(name, '해제', get_time(), ip, '')
curs.execute("delete from ban where block = '" + db_pas(name) + "'")
else:
b = re.search("^([0-9]{1,3}\.[0-9]{1,3})$", name)
if(b):
rb_plus(name, end, get_time(), ip, request.forms.why)
curs.execute("insert into ban (block, end, why, band) value ('" + db_pas(name) + "', '" + db_pas(end) + "', '" + db_pas(request.forms.why) + "', 'O')")
else:
rb_plus(name, end, get_time(), ip, request.forms.why)
curs.execute("insert into ban (block, end, why, band) value ('" + db_pas(name) + "', '" + db_pas(end) + "', '" + db_pas(request.forms.why) + "', '')")
conn.commit()
conn.close()
return(redirect('/ban/' + url_pas(name)))
else:
conn.close()
return(redirect('/error/3'))
else:
if(admin_check(1) == 1):
curs.execute("select * from ban where block = '" + db_pas(name) + "'")
row = curs.fetchall()
if(row):
now = '차단 해제'
else:
b = re.search("^([0-9]{1,3}\.[0-9]{1,3})$", name)
if(b):
now = '대역 차단'
else:
now = '차단'
conn.close()
return(template('ban', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = name, page = url_pas(name), logo = set_data['name'], now = now, today = get_time(), sub = '차단'))
else:
conn.close()
return(redirect('/error/3'))
@route('/acl/', method=['POST', 'GET'])
def acl(name = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
if(request.method == 'POST'):
if(admin_check(5) == 1):
curs.execute("select acl from data where title = '" + db_pas(name) + "'")
row = curs.fetchall()
if(row):
if(request.forms.select == 'admin'):
curs.execute("update data set acl = 'admin' where title = '" + db_pas(name) + "'")
elif(request.forms.select == 'user'):
curs.execute("update data set acl = 'user' where title = '" + db_pas(name) + "'")
else:
curs.execute("update data set acl = '' where title = '" + db_pas(name) + "'")
conn.commit()
conn.close()
return(redirect('/w/' + url_pas(name)) )
else:
conn.close()
return(redirect('/error/3'))
else:
if(admin_check(5) == 1):
curs.execute("select acl from data where title = '" + db_pas(name) + "'")
row = curs.fetchall()
if(row):
if(row[0]['acl'] == 'admin'):
now = '관리자만'
elif(row[0]['acl'] == 'user'):
now = '로그인 이상'
else:
now = '일반'
conn.close()
return(template('acl', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = name, page = url_pas(name), logo = set_data['name'], now = '현재 ACL 상태는 ' + now, sub = 'ACL'))
else:
conn.close()
return(redirect('/w/' + url_pas(name)) )
else:
conn.close()
return(redirect('/error/3'))
@route('/admin/', method=['POST', 'GET'])
def user_admin(name = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
if(request.method == 'POST'):
if(admin_check(None) == 1):
curs.execute("select * from user where id = '" + db_pas(name) + "'")
user = curs.fetchall()
if(user):
if(not user[0]['acl'] == 'user'):
curs.execute("update user set acl = 'user' where id = '" + db_pas(name) + "'")
else:
curs.execute("update user set acl = '" + db_pas(request.forms.select) + "' where id = '" + db_pas(name) + "'")
conn.commit()
conn.close()
return(redirect('/'))
else:
conn.close()
return(redirect('/error/5'))
else:
conn.close()
return(redirect('/error/3'))
else:
if(admin_check(None) == 1):
curs.execute("select * from user where id = '" + db_pas(name) + "'")
user = curs.fetchall()
if(user):
if(not user[0]['acl'] == 'user'):
now = '권한 해제'
else:
now = '권한 부여'
div = ''
curs.execute('select name from alist order by name asc')
get_alist = curs.fetchall()
if(get_alist):
i = 0
name_rem = ''
for data in get_alist:
if(not name_rem == data['name']):
name_rem = data['name']
div += ''
conn.close()
return(template('admin', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = name, page = url_pas(name), datalist = div, logo = set_data['name'], now = now, sub = '권한 부여'))
else:
conn.close()
return(redirect('/error/5'))
else:
conn.close()
return(redirect('/error/3'))
@route('/ban')
def are_you_ban():
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
ip = ip_check()
if(ban_check(ip) == 1):
curs.execute("select * from ban where block = '" + db_pas(ip) + "'")
rows = curs.fetchall()
if(rows):
if(rows[0]['end']):
end = rows[0]['end'] + ' 까지 차단 상태 입니다. / 사유 : ' + rows[0]['why']
now = re.sub(':', '', get_time())
now = re.sub('\-', '', now)
now = int(re.sub(' ', '', now))
day = re.sub('\-', '', rows[0]['end'])
if(now >= int(day + '000000')):
curs.execute("delete from ban where block = '" + db_pas(ip) + "'")
conn.commit()
end = '차단이 풀렸습니다. 다시 시도 해 보세요.'
else:
end = '영구 차단 상태 입니다. / 사유 : ' + rows[0]['why']
else:
b = re.search("^([0-9](?:[0-9]?[0-9]?)\.[0-9](?:[0-9]?[0-9]?))", ip)
if(b):
results = b.groups()
curs.execute("select * from ban where block = '" + db_pas(results[0]) + "' and band = 'O'")
row = curs.fetchall()
if(row):
if(row[0]['end']):
end = row[0]['end'] + ' 까지 차단 상태 입니다. / 사유 : ' + rows[0]['why']
now = re.sub(':', '', get_time())
now = re.sub('\-', '', now)
now = int(re.sub(' ', '', now))
day = re.sub('\-', '', row[0]['end'])
if(now >= int(day + '000000')):
curs.execute("delete from ban where block = '" + db_pas(results[0]) + "' and band = 'O'")
conn.commit()
end = '차단이 풀렸습니다. 다시 시도 해 보세요.'
else:
end = '영구 차단 상태 입니다. / 사유 : ' + row[0]['why']
else:
end = '권한이 맞지 않는 상태 입니다.'
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = '권한 오류', logo = set_data['name'], data = end))
@route('/w//r//diff/')
def diff_data(name = None, a = None, b = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
curs.execute("select * from history where id = '" + db_pas(str(a)) + "' and title = '" + db_pas(name) + "'")
a_raw_data = curs.fetchall()
if(a_raw_data):
curs.execute("select * from history where id = '" + db_pas(str(b)) + "' and title = '" + db_pas(name) + "'")
b_raw_data = curs.fetchall()
if(b_raw_data):
a_data = re.sub('<', '<', a_raw_data[0]['data'])
a_data = re.sub('>', '>', a_data)
a_data = re.sub('"', '"', a_data)
b_data = re.sub('<', '<', b_raw_data[0]['data'])
b_data = re.sub('>', '>', b_data)
b_data = re.sub('"', '"', b_data)
diff_data = difflib.SequenceMatcher(None, a_data, b_data)
result = diff(diff_data)
result = '
' + result + '
'
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = name, logo = set_data['name'], data = result, sub = '비교', page = url_pas(name)))
else:
conn.close()
return(redirect('/history/' + url_pas(name)))
else:
conn.close()
return(redirect('/history/' + url_pas(name)))
@route('/down/')
def down(name = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
curs.execute("select title from data where title like '%" + db_pas(name) + "/%'")
under = curs.fetchall()
div = ''
i = 0
for data in under:
div += '
'
i += 1
conn.close()
return(template('other', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = name, logo = set_data['name'], data = div, sub = '하위 문서', page = url_pas(name)))
@route('/w/')
@route('/w//from/')
def read_view(name = None, redirect = None):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
data_none = False
sub = None
acl = ''
div = ''
i = 0
curs.execute("select sub from rd where title = '" + db_pas(name) + "' order by date asc")
rows = curs.fetchall()
while(True):
try:
curs.execute("select title from stop where title = '" + db_pas(name) + "' and sub = '" + db_pas(rows[i]['sub']) + "' and close = 'O'")
row = curs.fetchall()
if(not row):
topic = "open"
break
i += 1
except:
topic = ""
break
curs.execute("select title from data where title like '%" + db_pas(name) + "/%'")
under = curs.fetchall()
if(under):
down = True
else:
down = False
m = re.search("^(.*)\/(.*)$", name)
if(m):
uppage = m.groups()[0]
else:
uppage = False
if(admin_check(5) == 1):
admin_memu = 'ACL'
else:
admin_memu = ''
if(re.search("^분류:", name)):
curs.execute("select * from cat where title = '" + db_pas(name) + "' order by cat asc")
rows = curs.fetchall()
if(rows):
div = '
분류
'
i = 0
for data in rows:
curs.execute("select * from data where title = '" + db_pas(data['cat']) + "'")
row = curs.fetchall()
if(row):
aa = row[0]['data']
aa = namumark('', aa)
bb = re.search('
분류:((?:(?!<\/div>).)*)<\/div>', aa)
if(bb):
cc = bb.groups()
mm = re.search("^분류:(.*)", name)
if(mm):
ee = mm.groups()
if(re.search("" + ee[0] + "<\/a>", cc[0])):
div += '
'
i += 1
else:
curs.execute("delete from cat where title = '" + db_pas(name) + "' and cat = '" + db_pas(data['cat']) + "'")
conn.commit()
i += 1
else:
curs.execute("delete from cat where title = '" + db_pas(name) + "' and cat = '" + db_pas(data['cat']) + "'")
conn.commit()
i += 1
else:
curs.execute("delete from cat where title = '" + db_pas(name) + "' and cat = '" + db_pas(data['cat']) + "'")
conn.commit()
i += 1
else:
curs.execute("delete from cat where title = '" + db_pas(name) + "' and cat = '" + db_pas(data['cat']) + "'")
conn.commit()
i += 1
curs.execute("select * from data where title = '" + db_pas(name) + "'")
rows = curs.fetchall()
if(rows):
if(rows[0]['acl'] == 'admin'):
acl = '(관리자)'
elif(rows[0]['acl'] == 'user'):
acl = '(로그인)'
elsedata = rows[0]['data']
else:
data_none = True
elsedata = 'None'
m = re.search("^사용자:([^/]*)", name)
if(m):
g = m.groups()
curs.execute("select acl from user where id = '" + db_pas(g[0]) + "'")
test = curs.fetchall()
if(test):
if(not test[0]['acl'] == 'user'):
acl = '(관리자)'
curs.execute("select block from ban where block = '" + db_pas(g[0]) + "'")
user = curs.fetchall()
if(user):
sub = '차단'
if(redirect):
elsedata = re.sub("^#(?:redirect|넘겨주기)\s(?P[^\n]*)", " * [[\g]] 문서로 넘겨주기", elsedata)
enddata = namumark(name, elsedata)
conn.close()
return(template('read', custom = custom_css_user(), license = set_data['license'], login = login_check(), title = name, logo = set_data['name'], page = url_pas(name), data = enddata + div, uppage = uppage, acl = acl, topic = topic, redirect = redirect, admin = admin_memu, data_none = data_none, sub = sub, down = down))
@route('/user//topic')
@route('/user//topic/')
def user_topic_list(name = None, num = 1):
conn = pymysql.connect(user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4', db = set_data['db'])
curs = conn.cursor(pymysql.cursors.DictCursor)
if(num * 50 <= 0):
v = 50
else:
v = num * 50
i = v - 50
ydmin = admin_check(1)
div = '
토론명
작성자
시간
'
curs.execute("select title, id, sub, ip, date from topic where ip = '" + db_pas(name) + "' order by date desc limit " + str(i) + ", " + str(v))
rows = curs.fetchall()
if(rows):
for data in rows:
title = re.sub('<', '<', data['title'])
title = re.sub('>', '>', title)
title = re.sub('"', '"', title)
sub = re.sub('<', '<', data['sub'])
sub = re.sub('>', '>', sub)
sub = re.sub('"', '"', sub)
if(ydmin == 1):
curs.execute("select * from ban where block = '" + db_pas(data['ip']) + "'")
row = curs.fetchall()
if(row):
ban = ' (해제)'
else:
ban = ' (차단)'
else:
ban = ''
ip = ip_pas(data['ip'], 1)
div += '