'
i += 1
else:
div += ' \
(생성)'
return(
template('other',
custom = custom_css_user(),
license = set_data['license'],
login = login_check(),
logo = set_data['name'],
data = re.sub('^ ', '', div),
title = 'ACL 목록'
)
)
@route('/admin_plus/', method=['POST', 'GET'])
def admin_plus(name = None):
if(admin_check(None) == 1):
if(request.method == 'POST'):
curs.execute("delete from alist where name = ?", [name])
if(request.forms.ban):
curs.execute("insert into alist (name, acl) values (?, 'ban')", [name])
if(request.forms.mdel):
curs.execute("insert into alist (name, acl) values (?, 'mdel')", [name])
if(request.forms.toron):
curs.execute("insert into alist (name, acl) values (?, 'toron')", [name])
if(request.forms.check):
curs.execute("insert into alist (name, acl) values (?, 'check')", [name])
if(request.forms.acl):
curs.execute("insert into alist (name, acl) values (?, 'acl')", [name])
if(request.forms.hidel):
curs.execute("insert into alist (name, acl) values (?, 'hidel')", [name])
if(request.forms.owner):
curs.execute("insert into alist (name, acl) values (?, 'owner')", [name])
conn.commit()
return(redirect('/admin_plus/admin'))
else:
curs.execute('select acl from alist where name = ?', [name])
test = curs.fetchall()
data = ''
exist_list = ['', '', '', '', '', '', '', '', '']
for go in test:
if(go[0] == 'ban'):
exist_list[0] = 'checked="checked"'
elif(go[0] == 'mdel'):
exist_list[1] = 'checked="checked"'
elif(go[0] == 'toron'):
exist_list[2] = 'checked="checked"'
elif(go[0] == 'check'):
exist_list[3] = 'checked="checked"'
elif(go[0] == 'acl'):
exist_list[4] = 'checked="checked"'
elif(go[0] == 'hidel'):
exist_list[5] = 'checked="checked"'
elif(go[0] == 'owner'):
exist_list[7] = 'checked="checked"'
data += '
차단
'
data += '
많은 문서 삭제
'
data += '
토론 관리
'
data += '
사용자 검사
'
data += '
문서 ACL
'
data += '
역사 숨김
'
data += '
소유자
'
return(
template('other',
custom = custom_css_user(),
license = set_data['license'],
login = login_check(),
title = '관리 그룹 추가',
logo = set_data['name'],
data = ''
)
)
else:
return(redirect('/error/3'))
@route('/admin_list')
def admin_list():
i = 1
div = ''
curs.execute("select id, acl from user where not acl = 'user'")
user_data = curs.fetchall()
for data in user_data:
name = ip_pas(data[0], 2) + ' (' + data[1] + ')'
div += '
' + str(i) + '. ' + name + '
'
i += 1
return(
template('other',
custom = custom_css_user(),
license = set_data['license'],
login = login_check(),
logo = set_data['name'],
data = div,
title = '관리자 목록'
)
)
@route('/record/')
@route('/record//n/')
@route('/recentchanges')
def recentchanges(name = None, num = 1):
ydmin = admin_check(1)
zdmin = admin_check(6)
ban = ''
send = ' '
div = '
\
\
\
문서명
\
기여자
\
시간
\
'
if(name):
if(num * 50 <= 0):
v = 50
else:
v = num * 50
i = v - 50
curs.execute("select id, title, date, ip, send, leng from history where ip = ? order by date desc limit ?, ?", [name, str(i), str(v)])
else:
curs.execute("select id, title, date, ip, send, leng from history order by date desc limit 50")
rows = curs.fetchall()
for data in rows:
if(data[4]):
if(not re.search("^(?: *)$", data[4])):
send = data[4]
title = re.sub('<', '<', data[1])
title = re.sub('>', '>', title)
title = re.sub('"', '"', title)
if(re.search("\+", data[5])):
leng = '' + data[5] + ''
elif(re.search("\-", data[5])):
leng = '' + data[5] + ''
else:
leng = '' + data[5] + ''
if(ydmin == 1):
curs.execute("select * from ban where block = ?", [data[3]])
row = curs.fetchall()
if(row):
ban = ' (해제)'
else:
ban = ' (차단)'
ip = ip_pas(data[3], None)
if((int(data[0]) - 1) == 0):
revert = ''
else:
revert = '(비교)(되돌리기)'
style = ''
curs.execute("select * from hidhi where title = ? and re = ?", [data[1], data[0]])
row = curs.fetchall()
if(zdmin == 1):
if(row):
ip += ' (숨김)'
hidden = ' (공개)'
else:
hidden = ' (숨김)'
else:
if(row):
ip = '숨김'
hidden = ''
send = '숨김'
ban = ''
style = 'display:none;'
else:
hidden = ''
div += '
'
if(name):
curs.execute("select end, why from ban where block = ?", [name])
ban_it = curs.fetchall()
if(ban_it):
sub = '차단'
else:
sub = None
else:
sub = None
return(
template('other',
custom = custom_css_user(),
license = set_data['license'],
login = login_check(),
logo = set_data['name'],
data = div,
sub = sub,
title = '최근 변경내역'
)
)
@route('/history//r//hidden')
def history_hidden(name = None, num = None):
if(admin_check(6) == 1):
curs.execute("select * from hidhi where title = ? and re = ?", [name, str(num)])
exist = curs.fetchall()
if(exist):
curs.execute("delete from hidhi where title = ? and re = ?", [name, str(num)])
else:
curs.execute("insert into hidhi (title, re) values (?, ?)", [name, str(num)])
conn.commit()
return(redirect('/history/' + url_pas(name)))
@route('/userlog')
@route('/userlog/n/')
def user_log(num = 1):
if(num * 50 <= 0):
i = 50
else:
i = num * 50
j = i - 50
list_data = ''
ydmin = admin_check(1)
curs.execute("select id from user limit ?, ?", [str(j), str(i)])
user_list = curs.fetchall()
for data in user_list:
if(ydmin == 1):
curs.execute("select block from ban where block = ?", [data[0]])
ban_exist = curs.fetchall()
if(ban_exist):
ban_button = ' (해제)'
else:
ban_button = ' (차단)'
else:
ban_button = ''
ip = ip_pas(data[0], None)
list_data += '
' + str(j + 1) + '. ' + ip + ban_button + '
'
j += 1
else:
list_data += ' \
(이전)(이후)'
return(
template('other',
custom = custom_css_user(),
license = set_data['license'],
login = login_check(),
logo = set_data['name'],
data = list_data,
title = '사용자 가입 기록'
)
)
@route('/backreset')
def xref_reset():
if(admin_check(None) == 1):
curs.execute("delete from back")
curs.execute("delete from cat")
conn.commit()
curs.execute("select title, data from data")
data = curs.fetchall()
for end in data:
namumark(end[0], end[1], 1)
return(redirect('/'))
else:
return(redirect('/error/3'))
@route('/xref/')
@route('/xref//n/')
def xref(name = None, num = 1):
if(num * 50 <= 0):
v = 50
else:
v = num * 50
i = v - 50
div = ''
curs.execute("delete from back where title = ? and link = ''", [name])
conn.commit()
curs.execute("select link, type from back where title = ? order by link asc limit ?, ?", [name, str(i), str(v)])
rows = curs.fetchall()
for data in rows:
div += '
' + data[0] + ''
if(data[1]):
div += ' (' + data[1] + ')'
div += '
'
else:
div += ' \
(이전)(이후)'
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 = '역링크'
)
)
@route('/recentdiscuss')
def recentdiscuss():
div = '
\
\
\
토론명
\
시간
\
'
curs.execute("select title, sub, date from rd order by date desc limit 50")
rows = curs.fetchall()
for data in rows:
title = re.sub('<', '<', data[0])
title = re.sub('>', '>', title)
title = re.sub('"', '"', title)
sub = re.sub('<', '<', data[1])
sub = re.sub('>', '>', sub)
sub = re.sub('"', '"', sub)
div += '
\
\
(이전)(이후)'
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():
curs.execute("select title from data where title = ?", [request.forms.search])
data = curs.fetchall()
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):
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 ?", ['%' + name + '%'])
title_list = curs.fetchall()
curs.execute("select title from data where data like ?", ['%' + name + '%'])
data_list = curs.fetchall()
curs.execute("select title from data where title = ?", [name])
exist = curs.fetchall()
if(exist):
div = '
'
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):
if(admin_check(3) == 1):
curs.execute("select block from topic where title = ? and sub = ? and id = ?", [name, sub, str(num)])
block = curs.fetchall()
if(block):
if(block[0][0] == 'O'):
curs.execute("update topic set block = '' where title = ? and sub = ? and id = ?", [name, sub, str(num)])
else:
curs.execute("update topic set block = 'O' where title = ? and sub = ? and id = ?", [name, sub, str(num)])
conn.commit()
rd_plus(
name,
sub,
get_time()
)
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
return(redirect('/error/3'))
@route('/topic//sub//notice/')
def topic_top(name = None, sub = None, num = None):
if(admin_check(3) == 1):
curs.execute("select * from topic where title = ? and sub = ? and id = ?", [name, sub, str(num)])
topic_data = curs.fetchall()
if(topic_data):
curs.execute("select top from topic where id = ? and title = ? and sub = ?", [str(num), name, sub])
top_data = curs.fetchall()
if(top_data):
if(top_data[0][0] == 'O'):
curs.execute("update topic set top = '' where title = ? and sub = ? and id = ?", [name, sub, str(num)])
else:
curs.execute("update topic set top = 'O' where title = ? and sub = ? and id = ?", [name, sub, str(num)])
conn.commit()
rd_plus(
name,
sub,
get_time()
)
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
return(redirect('/error/3'))
@route('/topic//sub//agree')
def topic_agree(name = None, sub = None):
if(admin_check(3) == 1):
ip = ip_check()
curs.execute("select id from topic where title = ? and sub = ? order by id + 0 desc limit 1", [name, sub])
topic_check = curs.fetchall()
if(topic_check):
time = get_time()
curs.execute("select title from agreedis where title = ? and sub = ?", [name, sub])
agree = curs.fetchall()
if(agree):
curs.execute("insert into topic (id, title, sub, data, date, ip, block, top) values (?, ?, ?, '합의 결렬', ?, ?, '', '1')", [str(int(topic_check[0][0]) + 1), name, sub, time, ip])
curs.execute("delete from agreedis where title = ? and sub = ?", [name, sub])
else:
curs.execute("insert into topic (id, title, sub, data, date, ip, block, top) values (?, ?, ?, '합의 완료', ?, ?, '', '1')", [str(int(topic_check[0][0]) + 1), name, sub, time, ip])
curs.execute("insert into agreedis (title, sub) values (?, ?)", [name, sub])
conn.commit()
rd_plus(
name,
sub,
time
)
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
return(redirect('/error/3'))
@route('/topic//sub//')
def topic_stop(name = None, sub = None, tool = None):
if(tool == 'close'):
close = 'O'
n_close = ''
data = '토론 닫음'
n_data = '토론 다시 열기'
elif(tool == 'stop'):
close = ''
n_close = 'O'
data = '토론 정지'
n_data = '토론 재 시작'
else:
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
if(admin_check(3) == 1):
ip = ip_check()
curs.execute("select id from topic where title = ? and sub = ? order by id + 0 desc limit 1", [name, sub])
topic_check = curs.fetchall()
if(topic_check):
time = get_time()
curs.execute("select title from stop where title = ? and sub = ? and close = ?", [name, sub, close])
stop = curs.fetchall()
if(stop):
curs.execute("insert into topic (id, title, sub, data, date, ip, block, top) values (?, ?, ?, ?, ?, ?, '', '1')", [str(int(topic_check[0][0]) + 1), name, sub, n_data, time, ip])
curs.execute("delete from stop where title = ? and sub = ? and close = ?", [name, sub, close])
else:
curs.execute("insert into topic (id, title, sub, data, date, ip, block, top) values (?, ?, ?, ?, ?, ?, '', '1')", [str(int(topic_check[0][0]) + 1), name, sub, data, time, ip])
curs.execute("insert into stop (title, sub, close) values (?, ?, ?)", [name, sub, close])
curs.execute("delete from stop where title = ? and sub = ? and close = ?", [name, sub, n_close])
conn.commit()
rd_plus(
name,
sub,
time
)
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
return(redirect('/error/3'))
@route('/topic//sub/', method=['POST', 'GET'])
def topic(name = None, sub = None):
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 = ? and sub = ? order by id + 0 desc limit 1", [name, sub])
rows = curs.fetchall()
if(rows):
num = int(rows[0][0]) + 1
else:
num = 1
if(ban == 1 and admin != 1):
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) values (?, ?, ?, ?, ?, ?, '', '')", [str(num), name, sub, aa, today, ip])
conn.commit()
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(sub)))
else:
style = ''
div = ''
curs.execute("select title from stop where title = ? and sub = ? and close = 'O'", [name, sub])
close = curs.fetchall()
curs.execute("select title from stop where title = ? and sub = ? and close = ''", [name, sub])
stop = curs.fetchall()
if(admin == 1):
if(close):
div += '(토론 열기) '
else:
div += '(토론 닫기) '
if(stop):
div += '(토론 재개) '
else:
div += '(토론 정지) '
curs.execute("select title from agreedis where title = ? and sub = ?", [name, sub])
agree = curs.fetchall()
if(agree):
div += '(합의 취소)'
else:
div += '(합의 완료)'
div += '
'
if((stop or close) and admin != 1):
style = 'display:none;'
curs.execute("select data, id, date, ip, block, top from topic where title = ? and sub = ? order by id + 0 asc", [name, sub])
toda = curs.fetchall()
curs.execute("select data, id, date, ip from topic where title = ? and sub = ? and top = 'O' order by id + 0 asc", [name, sub])
top = curs.fetchall()
for dain in top:
top_data = namumark('', dain[0], 0)
top_data = re.sub("(?P#(?:[0-9]*))", '\g', top_data)
ip = ip_pas(dain[3], 1)
div += '
\
'
i += 1
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/', method=['POST', 'GET'])
@route('/topic//', method=['GET'])
def close_topic_list(name = None, tool = None):
div = ''
i = 0
list_d = 0
if(request.method == 'POST'):
t_num = ''
while(1):
curs.execute("select title from topic where title = ? and sub = ? limit 1", [name, request.forms.topic + t_num])
t_data = curs.fetchall()
if(t_data):
if(t_num == ''):
t_num = ' 2'
else:
t_num = ' ' + str(int(t_num.replace(' ', '')) + 1)
else:
break
return(redirect('/topic/' + url_pas(name) + '/sub/' + url_pas(request.forms.topic + t_num)))
else:
if(tool == 'close'):
curs.execute("select sub from stop where title = ? and close = 'O' order by sub asc", [name])
sub = '닫힘'
elif(tool == 'agree'):
curs.execute("select sub from agreedis where title = ? order by sub asc", [name])
sub = '합의'
else:
list_d = 1
curs.execute("select sub from rd where title = ? order by date desc", [name])
sub = '토론 목록'
rows = curs.fetchall()
for data in rows:
curs.execute("select data, date, ip, block from topic where title = ? and sub = ? and id = '1'", [name, data[0]])
row = curs.fetchall()
if(row):
indata = namumark(name, row[0][0], 0)
if(row[0][3] == 'O'):
indata = ' '
block = 'id="block"'
else:
block = ''
ip = ip_pas(row[0][2], 1)
div += '
\
'
i += 1
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 = sub,
list = list_d
)
)
@route('/login', method=['POST', 'GET'])
def login():
session = request.environ.get('beaker.session')
ip = ip_check()
ban = ban_check(ip)
if(request.method == 'POST'):
if(ban == 1):
return(redirect('/ban'))
curs.execute("select pw from user where id = ?", [request.forms.id])
user = curs.fetchall()
if(user):
if(session.get('Now') == 1):
return(redirect('/error/11'))
if(bcrypt.checkpw(bytes(request.forms.pw, 'utf-8'), bytes(user[0][0], 'utf-8'))):
session['Now'] = 1
session['DREAMER'] = request.forms.id
curs.execute("select css from custom where user = ?", [request.forms.id])
css_data = curs.fetchall()
if(css_data):
session['Daydream'] = css_data[0][0]
else:
session['Daydream'] = ''
curs.execute("insert into login (user, ip, today) values (?, ?, ?)", [request.forms.id, ip, get_time()])
conn.commit()
return(redirect('/user'))
else:
return(redirect('/error/13'))
else:
return(redirect('/error/12'))
else:
if(ban == 1):
return(redirect('/ban'))
if(session.get('Now') == 1):
return(redirect('/error/11'))
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():
ip = ip_check()
ban = ban_check(ip)
if(request.method == 'POST'):
if(request.forms.pw2 == request.forms.pw3):
if(ban == 1):
return(redirect('/ban'))
curs.execute("select id from user where id = ?", [request.forms.id])
user = curs.fetchall()
if(user):
if(not re.search('(\.|:)', ip)):
return(redirect('/logout'))
if(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 = ? where id = ?", [hashed.decode(), request.forms.id])
conn.commit()
return(redirect('/login'))
else:
return(redirect('/error/10'))
else:
return(redirect('/error/9'))
else:
return(redirect('/error/20'))
else:
if(ban == 1):
return(redirect('/ban'))
if(not re.search('(\.|:)', ip)):
return(redirect('/logout'))
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):
curs.execute("select acl from user where id = ?", [name])
user = curs.fetchall()
if(user and user[0][0] != 'user'):
return(redirect('/error/4'))
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):
sql = 'ip'
else:
sql = 'user'
curs.execute("select user, ip, today from login where ? = ? order by today desc", [sql, name])
row = curs.fetchall()
if(row):
c = '
\
\
\
\
이름
\
아이피
\
언제
\
'
for data in row:
c += '
\
' + data[0] + '
\
' + data[1] + '
\
' + data[2] + '
\
'
else:
c += ' \
\
'
else:
c = ''
return(
template('other',
custom = custom_css_user(),
license = set_data['license'],
login = login_check(),
title = '다중 검사',
logo = set_data['name'],
data = c
)
)
else:
return(redirect('/error/3'))
@route('/register', method=['POST', 'GET'])
def register():
ip = ip_check()
ban = ban_check(ip)
if(ban == 1):
return(redirect('/ban'))
if(request.method == 'POST'):
if(request.forms.pw == request.forms.pw2):
m = re.search('(?:[^A-Za-zㄱ-힣0-9 ])', request.forms.id)
if(m):
return(redirect('/error/8'))
if(len(request.forms.id) > 20):
return(redirect('/error/7'))
curs.execute("select id from user where id = ?", [request.forms.id])
rows = curs.fetchall()
if(rows):
return(redirect('/error/6'))
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) values (?, ?, 'owner')", [request.forms.id, hashed.decode()])
else:
curs.execute("insert into user (id, pw, acl) values (?, ?, 'user')", [request.forms.id, hashed.decode()])
conn.commit()
return(redirect('/login'))
else:
return(redirect('/error/20'))
else:
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'] = 0
session.pop('DREAMER', None)
return(redirect('/user'))
@route('/ban/', method=['POST', 'GET'])
def user_ban(name = None):
curs.execute("select acl from user where id = ?", [name])
user = curs.fetchall()
if(user and user[0][0] != 'user'):
return(redirect('/error/4'))
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 block from ban where block = ?", [name])
row = curs.fetchall()
if(row):
rb_plus(name, '해제', get_time(), ip, '')
curs.execute("delete from ban where block = ?", [name])
else:
b = re.search("^([0-9]{1,3}\.[0-9]{1,3})$", name)
if(b):
band_d = 'O'
else:
band_d = ''
rb_plus(name, end, get_time(), ip, request.forms.why)
curs.execute("insert into ban (block, end, why, band) values (?, ?, ?, ?)", [name, end, request.forms.why, band_d])
conn.commit()
return(redirect('/ban/' + url_pas(name)))
else:
return(redirect('/error/3'))
else:
if(admin_check(1) == 1):
curs.execute("select * from ban where block = ?", [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 = '차단'
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:
return(redirect('/error/3'))
@route('/acl/', method=['POST', 'GET'])
def acl(name = None):
if(request.method == 'POST'):
if(admin_check(5) == 1):
curs.execute("select acl from data where title = ?", [name])
row = curs.fetchall()
if(row):
if(request.forms.select == 'admin'):
curs.execute("update data set acl = 'admin' where title = ?", [name])
elif(request.forms.select == 'user'):
curs.execute("update data set acl = 'user' where title = ?", [name])
else:
curs.execute("update data set acl = '' where title = ?", [name])
conn.commit()
return(redirect('/w/' + url_pas(name)))
else:
return(redirect('/error/3'))
else:
if(admin_check(5) == 1):
curs.execute("select acl from data where title = ?", [name])
row = curs.fetchall()
if(row):
if(row[0][0] == 'admin'):
now = '관리자만'
elif(row[0][0] == 'user'):
now = '로그인 이상'
else:
now = '일반'
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:
return(redirect('/w/' + url_pas(name)) )
else:
return(redirect('/error/3'))
@route('/admin/', method=['POST', 'GET'])
def user_admin(name = None):
if(request.method == 'POST'):
if(admin_check(None) == 1):
curs.execute("select acl from user where id = ?", [name])
user = curs.fetchall()
if(user):
if(user[0][0] != 'user'):
curs.execute("update user set acl = 'user' where id = ?", [name])
else:
curs.execute("update user set acl = ? where id = ?", [request.forms.select, name])
conn.commit()
return(redirect('/'))
else:
return(redirect('/error/5'))
else:
return(redirect('/error/3'))
else:
if(admin_check(None) == 1):
curs.execute("select acl from user where id = ?", [name])
user = curs.fetchall()
if(user):
if(user[0][0] != '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(name_rem != data[0]):
name_rem = data[0]
div += ''
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:
return(redirect('/error/5'))
else:
return(redirect('/error/3'))
@route('/ban')
def are_you_ban():
ip = ip_check()
if(ban_check(ip) == 1):
curs.execute("select end, why from ban where block = ?", [ip])
rows = curs.fetchall()
if(not rows):
data = re.search("^([0-9](?:[0-9]?[0-9]?)\.[0-9](?:[0-9]?[0-9]?))", ip)
if(data):
results = data.groups()
curs.execute("select end, why from ban where block = ? and band = 'O'", [results[0]])
rows = curs.fetchall()
if(rows):
if(rows[0][0]):
end = rows[0][0] + ' 까지 차단 상태 입니다. / 사유 : ' + rows[0][1]
now = re.sub(':', '', get_time())
now = re.sub('\-', '', now)
now = int(re.sub(' ', '', now))
day = re.sub('\-', '', rows[0][0])
if(now >= int(day + '000000')):
curs.execute("delete from ban where block = ?", [ip])
conn.commit()
end = '차단이 풀렸습니다. 다시 시도 해 보세요.'
else:
end = '영구 차단 상태 입니다. / 사유 : ' + rows[0][1]
else:
end = '권한이 맞지 않는 상태 입니다.'
else:
end = '권한이 맞지 않는 상태 입니다.'
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):
curs.execute("select data from history where id = ? and title = ?", [str(a), name])
a_raw_data = curs.fetchall()
if(a_raw_data):
curs.execute("select data from history where id = ? and title = ?", [str(b), name])
b_raw_data = curs.fetchall()
if(b_raw_data):
a_data = re.sub('<', '<', a_raw_data[0][0])
a_data = re.sub('>', '>', a_data)
a_data = re.sub('"', '"', a_data)
b_data = re.sub('<', '<', b_raw_data[0][0])
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 + '
'
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)
)
)
return(redirect('/history/' + url_pas(name)))
@route('/down/')
def down(name = None):
curs.execute("select title from data where title like ?", ['%' + name + '/%'])
under = curs.fetchall()
div = ''
i = 0
for data in under:
div += '
'
i += 1
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//r/')
@route('/w//from/')
def read_view(name = None, num = None, redirect = None):
data_none = 0
sub = 0
acl = ''
div = ''
topic = ''
curs.execute("select sub from rd where title = ? order by date desc", [name])
rows = curs.fetchall()
for data in rows:
curs.execute("select title from stop where title = ? and sub = ? and close = 'O'", [name, data[0]])
row = curs.fetchall()
if(not row):
topic = "open"
break
curs.execute("select title from data where title like ?", ['%' + name + '/%'])
under = curs.fetchall()
if(under):
down = 1
else:
down = 0
m = re.search("^(.*)\/(.*)$", name)
if(m):
uppage = m.groups()[0]
else:
uppage = 0
if(admin_check(5) == 1):
admin_memu = 'ACL'
else:
admin_memu = ''
if(re.search("^분류:", name)):
curs.execute("delete from cat where title = ? and cat = ''", [name])
conn.commit()
curs.execute("select cat from cat where title = ? order by cat asc", [name])
rows = curs.fetchall()
if(rows):
div = '
'
if(num):
curs.execute("select title from hidhi where title = ? and re = ?", [name, str(num)])
hid = curs.fetchall()
if(hid and admin_check(6) != 1):
return(redirect('/history/' + url_pas(name)))
curs.execute("select title, data from history where title = ? and id = ?", [name, str(num)])
else:
curs.execute("select acl, data from data where title = ?", [name])
rows = curs.fetchall()
if(rows):
if(not num):
if(rows[0][0] == 'admin'):
acl = '(관리자)'
elif(rows[0][0] == 'user'):
acl = '(로그인)'
elsedata = rows[0][1]
else:
data_none = 1
elsedata = ''
m = re.search("^사용자:([^/]*)", name)
if(m):
g = m.groups()
curs.execute("select acl from user where id = ?", [g[0]])
test = curs.fetchall()
if(test and test[0][0] != 'user'):
acl = '(관리자)'
curs.execute("select block from ban where block = ?", [g[0]])
user = curs.fetchall()
if(user):
sub = '차단'
if(redirect):
elsedata = re.sub("^#(?:redirect|넘겨주기)\s(?P[^\n]*)", " * [[\g]] 문서로 넘겨주기", elsedata)
enddata = namumark(name, elsedata, 1)
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):
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 = ? order by date desc limit ?, ?", [name, str(i), str(v)])
rows = curs.fetchall()
if(rows):
for data in rows:
title = re.sub('<', '<', data[0])
title = re.sub('>', '>', title)
title = re.sub('"', '"', title)
sub = re.sub('<', '<', data[2])
sub = re.sub('>', '>', sub)
sub = re.sub('"', '"', sub)
if(ydmin == 1):
curs.execute("select * from ban where block = ?", [data[3]])
row = curs.fetchall()
if(row):
ban = ' (해제)'
else:
ban = ' (차단)'
else:
ban = ''
ip = ip_pas(data[3], 1)
div += '