((?:(?!\/div>).)*)<\/div>', enddata)
if(m):
result = m.groups()
left = result[0]
else:
left = ''
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), data = enddata + '
' + div, license = data['license'], tn = 1, uppage = uppage, style = style, acl = acl, topic = topic, redirect = '
' + redirect + '에서 넘어 왔습니다.')
else:
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), data = div, license = data['license'], tn = 1, uppage = uppage, style = style, acl = acl, topic = topic, redirect = '
' + redirect + '에서 넘어 왔습니다.')
else:
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), data = '분류 문서 없음', license = data['license'], tn = 1, uppage = uppage, style = style, acl = acl, topic = topic, redirect = '
' + redirect + '에서 넘어 왔습니다.'), 404
else:
m = re.search("^사용자:(.*)", name)
if(m):
g = m.groups()
curs.execute("select * from user where id = '" + pymysql.escape_string(g[0]) + "'")
rows = curs.fetchall()
if(rows):
if(rows[0]['acl'] == 'owner'):
acl = '(소유자)'
elif(rows[0]['acl'] == 'admin'):
acl = '(관리자)'
curs.execute("select * from data where title = '" + pymysql.escape_string(name) + "'")
rows = curs.fetchall()
if(rows):
if(rows[0]['acl'] == 'admin'):
acl = '(관리자)'
elif(rows[0]['acl'] == 'user'):
acl = '(유저)'
else:
if(not acl):
acl = ''
newdata = re.sub('^#(?:redirect|넘겨주기)\s(?P
[^\n]*)', ' * \g 문서로 넘겨주기', rows[0]["data"])
enddata = namumark(name, newdata)
m = re.search('((?:(?!\/div>).)*)<\/div>', enddata)
if(m):
result = m.groups()
left = result[0]
else:
left = ''
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), data = enddata, license = data['license'], tn = 1, acl = acl, left = left, uppage = uppage, style = style, topic = topic, redirect = '
' + redirect + '에서 넘어 왔습니다.')
else:
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), data = '문서 없음', license = data['license'], tn = 1, uppage = uppage, style = style, acl = acl, topic = topic, redirect = '
' + redirect + '에서 넘어 왔습니다.'), 404
@app.route('/w/
/r/')
def rew(name = None, number = None):
curs.execute("select * from history where title = '" + pymysql.escape_string(name) + "' and id = '" + str(number) + "'")
rows = curs.fetchall()
if(rows):
enddata = namumark(name, rows[0]['data'])
m = re.search('((?:(?!\/div>).)*)<\/div>', enddata)
if(m):
result = m.groups()
left = result[0]
else:
left = ''
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), data = enddata, license = data['license'], tn = 6, left = left)
else:
return '
'
@app.route('/w/
/raw/')
def reraw(name = None, number = None):
curs.execute("select * from history where title = '" + pymysql.escape_string(name) + "' and id = '" + str(number) + "'")
rows = curs.fetchall()
if(rows):
enddata = re.sub('<', '<', rows[0]['data'])
enddata = re.sub('>', '>', enddata)
enddata = re.sub('"', '"', enddata)
enddata = re.sub("\n", '
', enddata)
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), data = enddata, license = data['license'])
else:
return ''
@app.route('/raw/')
def raw(name = None):
curs.execute("select * from data where title = '" + pymysql.escape_string(name) + "'")
rows = curs.fetchall()
if(rows):
enddata = re.sub('<', '<', rows[0]['data'])
enddata = re.sub('>', '>', enddata)
enddata = re.sub('"', '"', enddata)
enddata = re.sub("\n", '
', enddata)
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), data = enddata, license = data['license'], tn = 7)
else:
return ''
@app.route('/revert//r/', methods=['POST', 'GET'])
def revert(name = None, number = None):
if(request.method == 'POST'):
curs.execute("select * from history where title = '" + pymysql.escape_string(name) + "' and id = '" + str(number) + "'")
rows = curs.fetchall()
if(rows):
ip = getip(request)
can = getcan(ip, name)
if(can == 1):
return ''
else:
today = getnow()
curs.execute("select * from data where title = '" + pymysql.escape_string(name) + "'")
row = curs.fetchall()
if(row):
leng = getleng(len(row[0]['data']), len(rows[0]['data']))
curs.execute("update data set data = '" + pymysql.escape_string(rows[0]['data']) + "' where title = '" + pymysql.escape_string(name) + "'")
conn.commit()
else:
leng = '+' + str(len(rows[0]['data']))
curs.execute("insert into data (title, data, acl) value ('" + pymysql.escape_string(name) + "', '" + pymysql.escape_string(rows[0]['data']) + "', '')")
conn.commit()
history(name, rows[0]['data'], today, ip, '문서를 ' + str(number) + '판으로 되돌렸습니다.', leng)
return ''
else:
return ''
else:
ip = getip(request)
can = getcan(ip, name)
if(can == 1):
return ''
else:
curs.execute("select * from history where title = '" + pymysql.escape_string(name) + "' and id = '" + str(number) + "'")
rows = curs.fetchall()
if(rows):
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), r = parse.quote(str(number)).replace('/','%2F'), tn = 13, plus = '정말 되돌리시겠습니까?')
else:
return ''
@app.route('/edit/', methods=['POST', 'GET'])
def edit(name = None):
if(request.method == 'POST'):
m = re.search('(?:[^A-Za-zㄱ-힣0-9 ])', request.form["send"])
if(m):
return ''
else:
today = getnow()
content = re.sub("\[date\(now\)\]", today, request.form["content"])
curs.execute("select * from data where title = '" + pymysql.escape_string(name) + "'")
rows = curs.fetchall()
if(rows):
if(rows[0]['data'] == content):
return ''
else:
ip = getip(request)
can = getcan(ip, name)
if(can == 1):
return ''
else:
leng = getleng(len(rows[0]['data']), len(content))
history(name, content, today, ip, request.form["send"], leng)
curs.execute("update data set data = '" + pymysql.escape_string(content) + "' where title = '" + pymysql.escape_string(name) + "'")
conn.commit()
else:
ip = getip(request)
can = getcan(ip, name)
if(can == 1):
return ''
else:
leng = '+' + str(len(content))
history(name, content, today, ip, request.form["send"], leng)
curs.execute("insert into data (title, data, acl) value ('" + pymysql.escape_string(name) + "', '" + pymysql.escape_string(content) + "', '')")
conn.commit()
return ''
else:
ip = getip(request)
can = getcan(ip, name)
if(can == 1):
return ''
else:
curs.execute("select * from data where title = '" + pymysql.escape_string(data["help"]) + "'")
rows = curs.fetchall()
if(rows):
newdata = re.sub('^#(?:redirect|넘겨주기)\s(?P[^\n]*)', ' * \g 문서로 넘겨주기', rows[0]["data"])
left = namumark(name, newdata)
else:
left = ''
if(re.search('\.', ip)):
notice = '비 로그인 상태 입니다. 비 로그인으로 편집시 아이피가 역사에 기록 됩니다. 편집 시 동의 함으로 간주 됩니다.'
else:
notice = ''
curs.execute("select * from data where title = '" + pymysql.escape_string(name) + "'")
rows = curs.fetchall()
if(rows):
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), data = rows[0]['data'], tn = 2, notice = notice, left = left)
else:
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), data = '', tn = 2, notice = notice, left = left)
@app.route('/edit//section/', methods=['POST', 'GET'])
def secedit(name = None, number = None):
if(request.method == 'POST'):
m = re.search('(?:[^A-Za-zㄱ-힣0-9 ])', request.form["send"])
if(m):
return ''
else:
today = getnow()
content = re.sub("\[date\(now\)\]", today, request.form["content"])
curs.execute("select * from data where title = '" + pymysql.escape_string(name) + "'")
rows = curs.fetchall()
if(rows):
if(request.form["otent"] == content):
return ''
else:
ip = getip(request)
can = getcan(ip, name)
if(can == 1):
return ''
else:
leng = getleng(len(request.form['otent']), len(content))
content = rows[0]['data'].replace(request.form['otent'], content)
history(name, content, today, ip, request.form["send"], leng)
curs.execute("update data set data = '" + pymysql.escape_string(content) + "' where title = '" + pymysql.escape_string(name) + "'")
conn.commit()
return ''
else:
return ''
else:
ip = getip(request)
can = getcan(ip, name)
if(can == 1):
return ''
else:
curs.execute("select * from data where title = '" + pymysql.escape_string(data["help"]) + "'")
rows = curs.fetchall()
if(rows):
newdata = re.sub('^#(?:redirect|넘겨주기)\s(?P[^\n]*)', ' * \g 문서로 넘겨주기', rows[0]["data"])
left = namumark(name, newdata)
else:
left = ''
if(re.search('\.', ip)):
notice = '비 로그인 상태 입니다. 비 로그인으로 편집시 아이피가 역사에 기록 됩니다. 편집 시 동의 함으로 간주 됩니다.'
else:
notice = ''
curs.execute("select * from data where title = '" + pymysql.escape_string(name) + "'")
rows = curs.fetchall()
if(rows):
i = 0
j = 0
gdata = rows[0]['data'] + '\r\n'
while True:
m = re.search("((?:={1,6})\s?(?:[^=]*)\s?(?:={1,6})(?:\s+)?\n(?:(?:(?:(?!(?:={1,6})\s?(?:[^=]*)\s?(?:={1,6})(?:\s+)?\n).)*)(?:\n)?)+)", gdata)
if(m):
if(i == number - 1):
g = m.groups()
gdata = re.sub("\r\n$", "", g[0])
break
else:
gdata = re.sub("((?:={1,6})\s?(?:[^=]*)\s?(?:={1,6})(?:\s+)?\n(?:(?:(?:(?!(?:={1,6})\s?(?:[^=]*)\s?(?:={1,6})(?:\s+)?\n).)*)(?:\n)?)+)", "", gdata, 1)
i = i + 1
else:
j = 1
break
if(j == 0):
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), data = gdata, tn = 2, notice = notice, left = left, section = 1, number = number)
else:
return ''
else:
return ''
@app.route('/preview/', methods=['POST'])
def preview(name = None):
ip = getip(request)
can = getcan(ip, name)
if(can == 1):
return ''
else:
if(re.search('\.', ip)):
notice = '비 로그인 상태 입니다. 비 로그인으로 편집시 아이피가 역사에 기록 됩니다. 편집 시 동의 함으로 간주 됩니다.'
else:
notice = ''
newdata = request.form["content"]
newdata = re.sub('^#(?:redirect|넘겨주기)\s(?P[^\n]*)', ' * \g 문서로 넘겨주기', newdata)
enddata = namumark(name, newdata)
curs.execute("select * from data where title = '" + pymysql.escape_string(data["help"]) + "'")
rows = curs.fetchall()
if(rows):
newdata = re.sub('^#(?:redirect|넘겨주기)\s(?P[^\n]*)', ' * \g 문서로 넘겨주기', rows[0]["data"])
left = namumark(name, newdata)
else:
left = ''
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), data = request.form["content"], tn = 2, preview = 1, enddata = enddata, left = left, notice = notice)
@app.route('/preview//section/', methods=['POST'])
def secpreview(name = None, number = None):
ip = getip(request)
can = getcan(ip, name)
if(can == 1):
return ''
else:
if(re.search('\.', ip)):
notice = '비 로그인 상태 입니다. 비 로그인으로 편집시 아이피가 역사에 기록 됩니다. 편집 시 동의 함으로 간주 됩니다.'
else:
notice = ''
newdata = request.form["content"]
newdata = re.sub('^#(?:redirect|넘겨주기)\s(?P[^\n]*)', ' * \g 문서로 넘겨주기', newdata)
enddata = namumark(name, newdata)
curs.execute("select * from data where title = '" + pymysql.escape_string(data["help"]) + "'")
rows = curs.fetchall()
if(rows):
newdata = re.sub('^#(?:redirect|넘겨주기)\s(?P[^\n]*)', ' * \g 문서로 넘겨주기', rows[0]["data"])
left = namumark(name, newdata)
else:
left = ''
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), data = request.form["content"], tn = 2, preview = 1, enddata = enddata, left = left, notice = notice, section = 1, number = number, odata = request.form["otent"])
@app.route('/delete/', methods=['POST', 'GET'])
def delete(name = None):
if(request.method == 'POST'):
curs.execute("select * from data where title = '" + pymysql.escape_string(name) + "'")
rows = curs.fetchall()
if(rows):
ip = getip(request)
can = getcan(ip, name)
if(can == 1):
return ''
else:
today = getnow()
leng = '-' + str(len(rows[0]['data']))
history(name, '', today, ip, '문서를 삭제 했습니다.', leng)
curs.execute("delete from data where title = '" + pymysql.escape_string(name) + "'")
conn.commit()
return ''
else:
return ''
else:
curs.execute("select * from data where title = '" + pymysql.escape_string(name) + "'")
rows = curs.fetchall()
if(rows):
ip = getip(request)
can = getcan(ip, name)
if(can == 1):
return ''
else:
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), tn = 8, plus = '정말 삭제 하시겠습니까?')
else:
return ''
@app.route('/move/', methods=['POST', 'GET'])
def move(name = None):
if(request.method == 'POST'):
curs.execute("select * from data where title = '" + pymysql.escape_string(name) + "'")
rows = curs.fetchall()
if(rows):
ip = getip(request)
can = getcan(ip, name)
if(can == 1):
return ''
else:
today = getnow()
leng = '0'
curs.execute("select * from history where title = '" + pymysql.escape_string(request.form["title"]) + "'")
row = curs.fetchall()
if(row):
return ''
else:
history(name, rows[0]['data'], today, ip, '' + name + ' 문서를 ' + request.form["title"] + ' 문서로 이동 했습니다.', leng)
curs.execute("update data set title = '" + pymysql.escape_string(request.form["title"]) + "' where title = '" + pymysql.escape_string(name) + "'")
curs.execute("update history set title = '" + pymysql.escape_string(request.form["title"]) + "' where title = '" + pymysql.escape_string(name) + "'")
conn.commit()
return ''
else:
ip = getip(request)
can = getcan(ip, name)
if(can == 1):
return ''
else:
today = getnow()
leng = '0'
curs.execute("select * from history where title = '" + pymysql.escape_string(request.form["title"]) + "'")
row = curs.fetchall()
if(row):
return ''
else:
history(name, '', today, ip, '' + name + ' 문서를 ' + request.form["title"] + ' 문서로 이동 했습니다.', leng)
curs.execute("update history set title = '" + pymysql.escape_string(request.form["title"]) + "' where title = '" + pymysql.escape_string(name) + "'")
conn.commit()
return ''
else:
ip = getip(request)
can = getcan(ip, name)
if(can == 1):
return ''
else:
return render_template('index.html', title = name, logo = data['name'], page = parse.quote(name).replace('/','%2F'), tn = 9, plus = '정말 이동 하시겠습니까?')
@app.route('/other')
def other():
return render_template('index.html', title = '기타 메뉴', logo = data['name'], data = '모든 문서유저 차단 기록유저 가입 기록업로드관리자 메뉴유저 기록
이 오픈나무의 버전은 1.7.5.2 입니다.')
@app.route('/manager/', methods=['POST', 'GET'])
def manager(num = None):
if(num == 1):
return render_template('index.html', title = '관리자 메뉴', logo = data['name'], data = '문서 ACL유저 체크유저 차단관리자 권한 주기')
elif(num == 2):
if(request.method == 'POST'):
return ''
else:
return render_template('index.html', title = 'ACL 이동', logo = data['name'], data = '')
elif(num == 3):
if(request.method == 'POST'):
return ''
else:
return render_template('index.html', title = '체크 이동', logo = data['name'], data = '')
elif(num == 4):
if(request.method == 'POST'):
return ''
else:
return render_template('index.html', title = '차단 이동', logo = data['name'], data = '')
elif(num == 5):
if(request.method == 'POST'):
return ''
else:
return render_template('index.html', title = '권한 이동', logo = data['name'], data = '')
elif(num == 6):
if(request.method == 'POST'):
return ''
else:
return render_template('index.html', title = '기록 이동', logo = data['name'], data = '')
else:
return ''
@app.route('/titleindex')
def titleindex():
i = 0
div = ''
curs.execute("select * from data order by title asc")
rows = curs.fetchall()
if(rows):
while True:
try:
a = rows[i]
except:
div = div + '
'
break
div = div + '' + rows[i]['title'] + ''
i = i + 1
return render_template('index.html', logo = data['name'], rows = div + '
이 위키에는 총 ' + str(i + 1) + '개의 문서가 있습니다.', tn = 4, title = '모든 문서')
else:
return render_template('index.html', logo = data['name'], rows = '', tn = 4, title = '모든 문서')
@app.route('/topic/', methods=['POST', 'GET'])
def topic(name = None):
if(request.method == 'POST'):
return ''
else:
div = ''
i = 0
j = 1
curs.execute("select * from rd where title = '" + pymysql.escape_string(name) + "' order by date asc")
rows = curs.fetchall()
while True:
try:
a = rows[i]
except:
div = div + '
'
break
curs.execute("select * from topic where title = '" + pymysql.escape_string(rows[i]['title']) + "' and sub = '" + pymysql.escape_string(rows[i]['sub']) + "' and id = '1' order by sub asc")
aa = curs.fetchall()
indata = namumark(name, aa[0]['data'])
if(aa[0]['block'] == 'O'):
indata = '블라인드 되었습니다.'
block = 'style="background: gainsboro;"'
else:
block = ''
curs.execute("select * from stop where title = '" + pymysql.escape_string(rows[i]['title']) + "' and sub = '" + pymysql.escape_string(rows[i]['sub']) + "' and close = 'O'")
row = curs.fetchall()
if(not row):
div = div + ''
div = div + '| #1 ' + aa[0]['ip'] + ' ' + aa[0]['date'] + ' |
| ' + indata + ' |
'
j = j + 1
i = i + 1
return render_template('index.html', title = name, page = parse.quote(name).replace('/','%2F'), logo = data['name'], plus = div, tn = 10, list = 1)
@app.route('/topic//close')
def topicstoplist(name = None):
if(request.method == 'POST'):
return ''
else:
div = ''
i = 0
curs.execute("select * from stop where title = '" + pymysql.escape_string(name) + "' and close = 'O' order by sub asc")
rows = curs.fetchall()
while True:
try:
a = rows[i]
except:
div = div + '
'
break
curs.execute("select * from topic where title = '" + pymysql.escape_string(name) + "' and sub = '" + pymysql.escape_string(rows[i]['sub']) + "' and id = '1'")
row = curs.fetchall()
if(row):
j = i + 1
indata = namumark(name, row[0]['data'])
if(row[0]['block'] == 'O'):
indata = '블라인드 되었습니다.'
block = 'style="background: gainsboro;"'
else:
block = ''
div = div + ''
div = div + '
'
i = i + 1
return render_template('index.html', title = name, page = parse.quote(name).replace('/','%2F'), logo = data['name'], plus = div, tn = 10)
@app.route('/topic//sub/', methods=['POST', 'GET'])
def sub(name = None, sub = None):
if(request.method == 'POST'):
curs.execute("select * from topic where title = '" + pymysql.escape_string(name) + "' and sub = '" + pymysql.escape_string(sub) + "' order by id+0 desc limit 1")
rows = curs.fetchall()
if(rows):
number = int(rows[0]['id']) + 1
else:
number = 1
ip = getip(request)
ban = getdiscuss(ip, name, sub)
if(ban == 1):
return ''
else:
curs.execute("select * from user where id = '" + pymysql.escape_string(ip) + "'")
rows = curs.fetchall()
if(rows):
if(rows[0]['acl'] == 'owner' or rows[0]['acl'] == 'admin'):
ip = ip + ' - Admin'
today = getnow()
discuss(name, sub, today)
aa = request.form["content"]
aa = re.sub("\[\[(분류:(?:(?:(?!\]\]).)*))\]\]", "[br]", aa)
aa = re.sub("\[date\(now\)\]", today, aa)
curs.execute("insert into topic (id, title, sub, data, date, ip, block) value ('" + str(number) + "', '" + pymysql.escape_string(name) + "', '" + pymysql.escape_string(sub) + "', '" + pymysql.escape_string(aa) + "', '" + today + "', '" + ip + "', '')")
conn.commit()
return ''
else:
ip = getip(request)
ban = getdiscuss(ip, name, sub)
admin = admincheck()
if(admin == 1):
div = '' + '
(토론 닫기 및 열기)' + '
(토론 정지 및 재개)'
else:
div = '
'
i = 0
curs.execute("select * from topic where title = '" + pymysql.escape_string(name) + "' and sub = '" + pymysql.escape_string(sub) + "' order by id+0 asc")
rows = curs.fetchall()
while True:
try:
a = rows[i]
except:
div = div + '
'
break
if(i == 0):
start = rows[i]['ip']
indata = namumark(name, rows[i]['data'])
if(rows[i]['block'] == 'O'):
indata = '블라인드 되었습니다.'
block = 'style="background: gainsboro;"'
else:
block = ''
m = re.search("([^-]*)\s\-\s(Close|Reopen|Stop|Restart)$", rows[i]['ip'])
if(m):
ban = ""
else:
if(admin == 1):
curs.execute("select * from ban where block = '" + pymysql.escape_string(rows[i]['ip']) + "'")
row = curs.fetchall()
if(rows[i]['block'] == 'O'):
isblock = '
(해제)'
else:
isblock = '
(블라인드)'
n = re.search("\- (?:Admin)$", rows[i]['ip'])
if(n):
ban = isblock
else:
if(row):
ban = '
(해제)' + isblock
else:
ban = '
(차단)' + isblock
else:
ban = ""
m = re.search("([^-]*)\s\-\s(Close|Reopen|Stop|Restart|Admin)$", rows[i]['ip'])
if(m):
g = m.groups()
curs.execute("select * from data where title = '사용자:" + pymysql.escape_string(g[0]) + "'")
row = curs.fetchall()
if(row):
ip = '
' + g[0] + ' - ' + g[1]
else:
ip = '
' + g[0] + ' - ' + g[1]
elif(re.search("\.", rows[i]["ip"])):
ip = rows[i]["ip"]
else:
curs.execute("select * from data where title = '사용자:" + pymysql.escape_string(rows[i]['ip']) + "'")
row = curs.fetchall()
if(row):
ip = '
' + rows[i]['ip'] + ''
else:
ip = '
' + rows[i]['ip'] + ''
if(rows[i]['ip'] == start):
j = i + 1
div = div + '
'
else:
j = i + 1
div = div + '
'
i = i + 1
return render_template('index.html', title = name, page = parse.quote(name).replace('/','%2F'), suburl = parse.quote(sub).replace('/','%2F'), sub = sub, logo = data['name'], rows = div, tn = 11, ban = ban)
@app.route('/topic/
/sub//b/')
def blind(name = None, sub = None, number = None):
if(session.get('Now') == True):
ip = getip(request)
curs.execute("select * from user where id = '" + pymysql.escape_string(ip) + "'")
rows = curs.fetchall()
if(rows):
if(rows[0]['acl'] == 'owner' or rows[0]['acl'] == 'admin'):
curs.execute("select * from topic where title = '" + pymysql.escape_string(name) + "' and sub = '" + pymysql.escape_string(sub) + "' and id = '" + number + "'")
row = curs.fetchall()
if(row):
if(row[0]['block'] == 'O'):
curs.execute("update topic set block = '' where title = '" + pymysql.escape_string(name) + "' and sub = '" + pymysql.escape_string(sub) + "' and id = '" + number + "'")
else:
curs.execute("update topic set block = 'O' where title = '" + pymysql.escape_string(name) + "' and sub = '" + pymysql.escape_string(sub) + "' and id = '" + number + "'")
conn.commit()
return ''
else:
return ''
else:
return ''
else:
return ''
else:
return ''
@app.route('/topic//sub//stop')
def topicstop(name = None, sub = None):
if(session.get('Now') == True):
ip = getip(request)
curs.execute("select * from user where id = '" + pymysql.escape_string(ip) + "'")
rows = curs.fetchall()
if(rows):
if(rows[0]['acl'] == 'owner' or rows[0]['acl'] == 'admin'):
curs.execute("select * from topic where title = '" + pymysql.escape_string(name) + "' and sub = '" + pymysql.escape_string(sub) + "' order by id+0 desc limit 1")
row = curs.fetchall()
if(row):
today = getnow()
curs.execute("select * from stop where title = '" + pymysql.escape_string(name) + "' and sub = '" + pymysql.escape_string(sub) + "' and close = ''")
rows = curs.fetchall()
if(rows):
curs.execute("insert into topic (id, title, sub, data, date, ip, block) value ('" + pymysql.escape_string(str(int(row[0]['id']) + 1)) + "', '" + pymysql.escape_string(name) + "', '" + pymysql.escape_string(sub) + "', 'Restart', '" + pymysql.escape_string(today) + "', '" + pymysql.escape_string(ip) + " - Restart', '')")
curs.execute("delete from stop where title = '" + pymysql.escape_string(name) + "' and sub = '" + pymysql.escape_string(sub) + "' and close = ''")
else:
curs.execute("insert into topic (id, title, sub, data, date, ip, block) value ('" + pymysql.escape_string(str(int(row[0]['id']) + 1)) + "', '" + pymysql.escape_string(name) + "', '" + pymysql.escape_string(sub) + "', 'Stop', '" + pymysql.escape_string(today) + "', '" + pymysql.escape_string(ip) + " - Stop', '')")
curs.execute("insert into stop (title, sub, close) value ('" + pymysql.escape_string(name) + "', '" + pymysql.escape_string(sub) + "', '')")
conn.commit()
return ''
else:
return ''
else:
return ''
else:
return ''
else:
return ''
@app.route('/topic//sub//close')
def topicclose(name = None, sub = None):
if(session.get('Now') == True):
ip = getip(request)
curs.execute("select * from user where id = '" + pymysql.escape_string(ip) + "'")
rows = curs.fetchall()
if(rows):
if(rows[0]['acl'] == 'owner' or rows[0]['acl'] == 'admin'):
curs.execute("select * from topic where title = '" + pymysql.escape_string(name) + "' and sub = '" + pymysql.escape_string(sub) + "' order by id+0 desc limit 1")
row = curs.fetchall()
if(row):
today = getnow()
curs.execute("select * from stop where title = '" + pymysql.escape_string(name) + "' and sub = '" + pymysql.escape_string(sub) + "' and close = 'O'")
rows = curs.fetchall()
if(rows):
curs.execute("insert into topic (id, title, sub, data, date, ip, block) value ('" + pymysql.escape_string(str(int(row[0]['id']) + 1)) + "', '" + pymysql.escape_string(name) + "', '" + pymysql.escape_string(sub) + "', 'Reopen', '" + pymysql.escape_string(today) + "', '" + pymysql.escape_string(ip) + " - Reopen', '')")
curs.execute("delete from stop where title = '" + pymysql.escape_string(name) + "' and sub = '" + pymysql.escape_string(sub) + "' and close = 'O'")
else:
curs.execute("insert into topic (id, title, sub, data, date, ip, block) value ('" + pymysql.escape_string(str(int(row[0]['id']) + 1)) + "', '" + pymysql.escape_string(name) + "', '" + pymysql.escape_string(sub) + "', 'Close', '" + pymysql.escape_string(today) + "', '" + pymysql.escape_string(ip) + " - Close', '')")
curs.execute("insert into stop (title, sub, close) value ('" + pymysql.escape_string(name) + "', '" + pymysql.escape_string(sub) + "', 'O')")
conn.commit()
return ''
else:
return ''
else:
return ''
else:
return ''
else:
return ''
@app.route('/login', methods=['POST', 'GET'])
def login():
if(request.method == 'POST'):
ip = getip(request)
ban = getban(ip)
if(ban == 1):
return ''
else:
curs.execute("select * from user where id = '" + pymysql.escape_string(request.form["id"]) + "'")
rows = curs.fetchall()
if(rows):
if(session.get('Now') == True):
return ''
elif(bcrypt.checkpw(bytes(request.form["pw"], 'utf-8'), bytes(rows[0]['pw'], 'utf-8'))):
session['Now'] = True
session['DREAMER'] = request.form["id"]
curs.execute("insert into login (user, ip, today) value ('" + pymysql.escape_string(request.form["id"]) + "', '" + pymysql.escape_string(ip) + "', '" + pymysql.escape_string(getnow()) + "')")
conn.commit()
return ''
else:
return ''
else:
return ''
else:
ip = getip(request)
ban = getban(ip)
if(ban == 1):
return ''
else:
if(session.get('Now') == True):
return ''
else:
return render_template('index.html', title = '로그인', enter = '로그인', logo = data['name'], tn = 15)
@app.route('/change', methods=['POST', 'GET'])
def change():
if(request.method == 'POST'):
ip = getip(request)
ban = getban(ip)
if(ban == 1):
return ''
else:
curs.execute("select * from user where id = '" + pymysql.escape_string(request.form["id"]) + "'")
rows = curs.fetchall()
if(rows):
if(session.get('Now') == True):
return ''
elif(bcrypt.checkpw(bytes(request.form["pw"], 'utf-8'), bytes(rows[0]['pw'], 'utf-8'))):
hashed = bcrypt.hashpw(bytes(request.form["pw2"], 'utf-8'), bcrypt.gensalt())
curs.execute("update user set pw = '" + pymysql.escape_string(hashed.decode()) + "' where id = '" + pymysql.escape_string(request.form["id"]) + "'")
conn.commit()
return ''
else:
return ''
else:
return ''
else:
ip = getip(request)
ban = getban(ip)
if(ban == 1):
return ''
else:
if(session.get('Now') == True):
return ''
else:
return render_template('index.html', title = '비밀번호 변경', enter = '변경', logo = data['name'], tn = 15)
@app.route('/check/')
def check(name = None, sub = None, number = None):
curs.execute("select * from user where id = '" + pymysql.escape_string(name) + "'")
rows = curs.fetchall()
if(rows and rows[0]['acl'] == 'owner' or rows and rows[0]['acl'] == 'admin'):
return ''
else:
if(admincheck() == 1):
m = re.search('(?:[0-9](?:[0-9][0-9])?\.[0-9](?:[0-9][0-9])?\.[0-9](?:[0-9][0-9])?\.[0-9](?:[0-9][0-9])?)', name)
if(m):
curs.execute("select * from login where ip = '" + pymysql.escape_string(name) + "' order by today desc")
row = curs.fetchall()
if(row):
i = 0
c = ''
while True:
try:
c = c + '| ' + row[i]['user'] + ' | ' + row[i]['ip'] + ' | ' + row[i]['today'] + ' |
'
except:
break
i = i + 1
return render_template('index.html', title = '다중 검사', logo = data['name'], tn = 22, rows = c)
else:
return render_template('index.html', title = '다중 검사', logo = data['name'], tn = 22, rows = '')
else:
curs.execute("select * from login where user = '" + pymysql.escape_string(name) + "' order by today desc")
row = curs.fetchall()
if(row):
i = 0
c = ''
while True:
try:
c = c + '| ' + row[i]['user'] + ' | ' + row[i]['ip'] + ' | ' + row[i]['today'] + ' |
'
except:
break
i = i + 1
return render_template('index.html', title = '다중 검사', logo = data['name'], tn = 22, rows = c)
else:
return render_template('index.html', title = '다중 검사', logo = data['name'], tn = 22, rows = '')
else:
return ''
@app.route('/register', methods=['POST', 'GET'])
def register():
if(request.method == 'POST'):
ip = getip(request)
ban = getban(ip)
if(ban == 1):
return ''
else:
m = re.search('(?:[^A-Za-zㄱ-힣0-9 ])', request.form["id"])
if(m):
return ''
else:
if(len(request.form["id"]) > 20):
return ''
else:
curs.execute("select * from user where id = '" + pymysql.escape_string(request.form["id"]) + "'")
rows = curs.fetchall()
if(rows):
return ''
else:
hashed = bcrypt.hashpw(bytes(request.form["pw"], 'utf-8'), bcrypt.gensalt())
if(request.form["id"] == data['owner']):
curs.execute("insert into user (id, pw, acl) value ('" + pymysql.escape_string(request.form["id"]) + "', '" + pymysql.escape_string(hashed.decode()) + "', 'owner')")
else:
curs.execute("insert into user (id, pw, acl) value ('" + pymysql.escape_string(request.form["id"]) + "', '" + pymysql.escape_string(hashed.decode()) + "', 'user')")
conn.commit()
return ''
else:
ip = getip(request)
ban = getban(ip)
if(ban == 1):
return ''
else:
return render_template('index.html', title = '회원가입', enter = '회원가입', logo = data['name'], tn = 15)
@app.route('/logout')
def logout():
session['Now'] = False
session.pop('DREAMER', None)
return ''
@app.route('/ban/', methods=['POST', 'GET'])
def ban(name = None):
curs.execute("select * from user where id = '" + pymysql.escape_string(name) + "'")
rows = curs.fetchall()
if(rows and rows[0]['acl'] == 'owner' or rows and rows[0]['acl'] == 'admin'):
return ''
else:
if(request.method == 'POST'):
if(admincheck() == 1):
ip = getip(request)
curs.execute("select * from ban where block = '" + pymysql.escape_string(name) + "'")
row = curs.fetchall()
if(row):
block(name, '해제', getnow(), ip, '')
curs.execute("delete from ban where block = '" + pymysql.escape_string(name) + "'")
else:
b = re.search("^([0-9](?:[0-9]?[0-9]?)\.[0-9](?:[0-9]?[0-9]?))$", name)
if(b):
block(name, request.form["end"], getnow(), ip, request.form["why"])
curs.execute("insert into ban (block, end, why, band) value ('" + pymysql.escape_string(name) + "', '" + pymysql.escape_string(request.form["end"]) + "', '" + pymysql.escape_string(request.form["why"]) + "', 'O')")
else:
block(name, request.form["end"], getnow(), ip, request.form["why"])
curs.execute("insert into ban (block, end, why, band) value ('" + pymysql.escape_string(name) + "', '" + pymysql.escape_string(request.form["end"]) + "', '" + pymysql.escape_string(request.form["why"]) + "', '')")
conn.commit()
return ''
else:
return ''
else:
if(admincheck() == 1):
curs.execute("select * from ban where block = '" + pymysql.escape_string(name) + "'")
row = curs.fetchall()
if(row):
now = '차단 해제'
else:
b = re.search("^([0-9](?:[0-9]?[0-9]?)\.[0-9](?:[0-9]?[0-9]?))$", name)
if(b):
now = '대역 차단'
else:
now = '차단'
return render_template('index.html', title = name, page = parse.quote(name).replace('/','%2F'), logo = data['name'], tn = 16, now = now, today = getnow())
else:
return ''
@app.route('/acl/', methods=['POST', 'GET'])
def acl(name = None):
if(request.method == 'POST'):
if(admincheck() == 1):
curs.execute("select * from data where title = '" + pymysql.escape_string(name) + "'")
row = curs.fetchall()
if(row):
if(request.form["select"] == 'admin'):
curs.execute("update data set acl = 'admin' where title = '" + pymysql.escape_string(name) + "'")
elif(request.form["select"] == 'user'):
curs.execute("update data set acl = 'user' where title = '" + pymysql.escape_string(name) + "'")
else:
curs.execute("update data set acl = '' where title = '" + pymysql.escape_string(name) + "'")
conn.commit()
return ''
else:
return ''
else:
if(admincheck() == 1):
curs.execute("select * from data where title = '" + pymysql.escape_string(name) + "'")
row = curs.fetchall()
if(row):
if(row[0]['acl'] == 'admin'):
now = '관리자만'
elif(row[0]['acl'] == 'user'):
now = '유저 이상'
else:
now = '일반'
return render_template('index.html', title = name, page = parse.quote(name).replace('/','%2F'), logo = data['name'], tn = 19, now = '현재 ACL 상태는 ' + now)
else:
return ''
else:
return ''
@app.route('/admin/', methods=['POST', 'GET'])
def admin(name = None):
if(request.method == 'POST'):
if(session.get('Now') == True):
ip = getip(request)
curs.execute("select * from user where id = '" + pymysql.escape_string(ip) + "'")
rows = curs.fetchall()
if(rows):
if(rows[0]['acl'] == 'owner' or rows[0]['acl'] == 'admin'):
curs.execute("select * from user where id = '" + pymysql.escape_string(name) + "'")
row = curs.fetchall()
if(row):
if(row[0]['acl'] == 'admin' or row[0]['acl'] == 'owner'):
curs.execute("update user set acl = 'user' where id = '" + pymysql.escape_string(name) + "'")
else:
curs.execute("update user set acl = '" + pymysql.escape_string(request.form["select"]) + "' where id = '" + pymysql.escape_string(name) + "'")
conn.commit()
return ''
else:
return ''
else:
return ''
else:
return ''
else:
return ''
else:
if(session.get('Now') == True):
ip = getip(request)
curs.execute("select * from user where id = '" + pymysql.escape_string(ip) + "'")
rows = curs.fetchall()
if(rows):
if(rows[0]['acl'] == 'owner'):
curs.execute("select * from user where id = '" + pymysql.escape_string(name) + "'")
row = curs.fetchall()
if(row):
if(row[0]['acl'] == 'admin' or row[0]['acl'] == 'owner'):
now = '권한 해제'
else:
now = '권한 부여'
return render_template('index.html', title = name, page = parse.quote(name).replace('/','%2F'), logo = data['name'], tn = 18, now = now)
else:
return ''
else:
return ''
else:
return ''
else:
return ''
@app.route('/ban')
def aban():
ip = getip(request)
if(getban(ip) == 1):
curs.execute("select * from ban where block = '" + pymysql.escape_string(ip) + "'")
rows = curs.fetchall()
if(rows):
if(rows[0]['end']):
end = rows[0]['end'] + ' 까지 차단 상태 입니다. / 사유 : ' + rows[0]['why']
now = getnow()
now = re.sub(':', '', now)
now = re.sub('\-', '', now)
now = re.sub(' ', '', now)
now = int(now)
day = rows[0]['end']
day = re.sub('\-', '', day)
if(now >= int(day + '000000')):
curs.execute("delete from ban where block = '" + pymysql.escape_string(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 = '" + pymysql.escape_string(results[0]) + "' and band = 'O'")
row = curs.fetchall()
if(row):
if(row[0]['end']):
end = row[0]['end'] + ' 까지 차단 상태 입니다. / 사유 : ' + rows[0]['why']
now = getnow()
now = re.sub(':', '', now)
now = re.sub('\-', '', now)
now = re.sub(' ', '', now)
now = int(now)
day = row[0]['end']
day = re.sub('\-', '', day)
if(now >= int(day + '000000')):
curs.execute("delete from ban where block = '" + pymysql.escape_string(results[0]) + "' and band = 'O'")
conn.commit()
end = '차단이 풀렸습니다. 다시 시도 해 보세요.'
else:
end = '영구 차단 상태 입니다. / 사유 : ' + row[0]['why']
else:
end = '권한이 맞지 않는 상태 입니다.'
return render_template('index.html', title = '권한 오류', logo = data['name'], data = end), 401
@app.route('/w//r//diff/')
def diff(name = None, a = None, b = None):
curs.execute("select * from history where id = '" + pymysql.escape_string(str(a)) + "' and title = '" + pymysql.escape_string(name) + "'")
rows = curs.fetchall()
if(rows):
curs.execute("select * from history where id = '" + pymysql.escape_string(str(b)) + "' and title = '" + pymysql.escape_string(name) + "'")
row = curs.fetchall()
if(row):
indata = re.sub('<', '<', rows[0]['data'])
indata = re.sub('>', '>', indata)
indata = re.sub('"', '"', indata)
indata = re.sub('\n', '
', indata)
enddata = re.sub('<', '<', row[0]['data'])
enddata = re.sub('>', '>', enddata)
enddata = re.sub('"', '"', enddata)
enddata = re.sub('\n', '
', enddata)
sm = difflib.SequenceMatcher(None, indata, enddata)
c = show_diff(sm)
return render_template('index.html', title = name, logo = data['name'], data = c, plus = '(비교)')
else:
return ''
else:
return ''
@app.route('/user')
def user():
ip = getip(request)
curs.execute("select * from user where id = '" + pymysql.escape_string(ip) + "'")
rows = curs.fetchall()
if(getban(ip) == 0):
if(rows):
if(rows[0]['acl'] == 'admin' or rows[0]['acl'] == 'owner'):
if(rows[0]['acl'] == 'admin'):
acl = '관리자'
else:
acl = '소유자'
else:
acl = '유저'
else:
acl = '일반'
else:
acl = '차단'
if(not re.search('\.', ip)):
curs.execute("select * from data where title = '사용자:" + pymysql.escape_string(ip) + "'")
row = curs.fetchall()
if(row):
ip = '' + ip + ''
else:
ip = '' + ip + ''
return render_template('index.html', title = '유저 메뉴', logo = data['name'], data = ip + '
권한 상태 : ' + acl + '
로그인로그아웃회원가입비밀번호 변경')
@app.route('/random')
def random():
curs.execute("select * from data order by rand() limit 1")
rows = curs.fetchall()
if(rows):
return ''
else:
return ''
@app.route('/error/')
def error(num = None):
if(num == 1):
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '비 로그인 상태 입니다.'), 401
elif(num == 2):
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '이 계정이 없습니다.'), 401
elif(num == 3):
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '권한이 모자랍니다.'), 401
elif(num == 4):
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '관리자는 차단, 검사 할 수 없습니다.'), 401
elif(num == 5):
return render_template('index.html', title = '유저 오류', logo = data['name'], data = '그런 계정이 없습니다.'), 401
elif(num == 6):
return render_template('index.html', title = '가입 오류', logo = data['name'], data = '동일한 아이디의 유저가 있습니다.'), 401
elif(num == 7):
return render_template('index.html', title = '가입 오류', logo = data['name'], data = '아이디는 20글자보다 짧아야 합니다.'), 401
elif(num == 8):
return render_template('index.html', title = '가입 오류', logo = data['name'], data = '아이디에는 한글과 알파벳과 공백만 허용 됩니다.'), 401
elif(num == 9):
return render_template('index.html', title = '변경 오류', logo = data['name'], data = '그런 계정이 없습니다.'), 401
elif(num == 10):
return render_template('index.html', title = '변경 오류', logo = data['name'], data = '비밀번호가 다릅니다.'), 401
elif(num == 11):
return render_template('index.html', title = '로그인 오류', logo = data['name'], data = '이미 로그인 되어 있습니다.'), 401
elif(num == 12):
return render_template('index.html', title = '로그인 오류', logo = data['name'], data = '그런 계정이 없습니다.'), 401
elif(num == 13):
return render_template('index.html', title = '로그인 오류', logo = data['name'], data = '비밀번호가 다릅니다.'), 401
elif(num == 14):
return render_template('index.html', title = '업로드 오류', logo = data['name'], data = 'jpg, gif, jpeg, png만 가능 합니다.'), 401
elif(num == 15):
return render_template('index.html', title = '업로드 오류', logo = data['name'], data = '파일 명에 . / \ * < > | : ? 가 들어 갈 수 없습니다.'), 401
elif(num == 16):
return render_template('index.html', title = '업로드 오류', logo = data['name'], data = '동일한 이름의 파일이 있습니다.'), 401
elif(num == 17):
return render_template('index.html', title = '편집 오류', logo = data['name'], data = '편집 내용 기록에는 한글과 영어와 숫자, 공백만 허용 됩니다.'), 401
elif(num == 18):
return render_template('index.html', title = '편집 오류', logo = data['name'], data = '내용이 원래 문서와 동일 합니다.'), 401
elif(num == 19):
return render_template('index.html', title = '이동 오류', logo = data['name'], data = '이동 하려는 곳에 문서가 이미 있습니다.'), 401
else:
return ''
@app.errorhandler(404)
def uncaughtError(error):
return ''
if __name__ == '__main__':
app.run(host = '0.0.0.0', port = int(data['port']), threaded = True)