' + '
(토론 닫기 및 열기)' + '
(토론 정지 및 재개)'
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 = rows[i]['data']
indata = re.sub('<', '<', indata)
indata = re.sub('>', '>', indata)
indata = re.sub('"', '"', indata)
indata = re.sub('\n', '
', indata)
if(rows[i]['block'] == 'O'):
indata = '블라인드 되었습니다.'
block = 'style="background: gainsboro;"'
else:
block = ''
m = re.search("\- (?:Close|Reopen|Stop|Restart)$", rows[i]['ip'])
if(m):
ip = rows[i]['ip']
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):
ip = rows[i]['ip'] + isblock
else:
if(row):
ip = rows[i]['ip'] + '
(해제)' + isblock
else:
ip = rows[i]['ip'] + '
(차단)' + isblock
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 render_template('index.html', title = '권한 오류', logo = data['name'], data = '권한이 모자랍니다.')
else:
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '계정이 없습니다.')
else:
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '비 로그인 상태 입니다.')
@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 render_template('index.html', title = '권한 오류', logo = data['name'], data = '권한이 모자랍니다.')
else:
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '계정이 없습니다.')
else:
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '비 로그인 상태 입니다.')
@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 render_template('index.html', title = '권한 오류', logo = data['name'], data = '권한이 모자랍니다.')
else:
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '계정이 없습니다.')
else:
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '비 로그인 상태 입니다.')
@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 render_template('index.html', title = '로그인 오류', logo = data['name'], data = '이미 로그인 되어 있습니다.')
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 render_template('index.html', title = '로그인 오류', logo = data['name'], data = '비밀번호가 다릅니다.')
else:
return render_template('index.html', title = '로그인 오류', logo = data['name'], data = '없는 계정 입니다.')
else:
ip = getip(request)
ban = getban(ip)
if(ban == 1):
return ''
else:
if(session.get('Now') == True):
return render_template('index.html', title = '로그인 오류', logo = data['name'], data = '이미 로그인 되어 있습니다.')
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[0]['acl'] == 'owner' or rows[0]['acl'] == 'admin'):
return render_template('index.html', title = '차단 오류', logo = data['name'], data = '관리자는 검사 할 수 없습니다.')
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 render_template('index.html', title = '권한 오류', logo = data['name'], data = '권한이 모자랍니다.')
@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 render_template('index.html', title = '회원가입 오류', logo = data['name'], data = '아이디에는 한글과 알파벳 공백만 허용 됩니다.')
else:
if(len(request.form["id"]) > 20):
return render_template('index.html', title = '회원가입 오류', logo = data['name'], data = '아이디는 20글자보다 짧아야 합니다.')
else:
curs.execute("select * from user where id = '" + pymysql.escape_string(request.form["id"]) + "'")
rows = curs.fetchall()
if(rows):
return render_template('index.html', title = '회원가입 오류', logo = data['name'], data = '동일한 아이디의 유저가 있습니다.')
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[0]['acl'] == 'owner' or rows[0]['acl'] == 'admin'):
return render_template('index.html', title = '차단 오류', logo = data['name'], data = '관리자는 차단 할 수 없습니다.')
else:
if(request.method == 'POST'):
if(admincheck() == 1):
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 render_template('index.html', title = '권한 오류', logo = data['name'], data = '권한이 모자랍니다.')
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 render_template('index.html', title = '권한 오류', logo = data['name'], data = '권한이 모자랍니다.')
@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 render_template('index.html', title = '권한 오류', logo = data['name'], data = '권한이 모자랍니다.')
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 render_template('index.html', title = '권한 오류', logo = data['name'], data = '권한이 모자랍니다.')
@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 render_template('index.html', title = '사용자 오류', logo = data['name'], data = '계정이 없습니다.')
else:
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '권한이 모자랍니다.')
else:
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '계정이 없습니다.')
else:
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '비 로그인 상태 입니다.')
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 render_template('index.html', title = '사용자 오류', logo = data['name'], data = '계정이 없습니다.')
else:
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '권한이 모자랍니다.')
else:
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '계정이 없습니다.')
else:
return render_template('index.html', title = '권한 오류', logo = data['name'], data = '비 로그인 상태 입니다.')
@app.route('/grammar')
def grammar():
return render_template('index.html', title = '문법 설명', logo = data['name'], tn = 17)
@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)
@app.route('/w//r//diff/')
def diff(name = None, a = None, b = None):
curs.execute("select * from history where id = '" + pymysql.escape_string(a) + "' and title = '" + pymysql.escape_string(name) + "'")
rows = curs.fetchall()
if(rows):
curs.execute("select * from history where id = '" + pymysql.escape_string(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 = 'Diff', logo = data['name'], data = c)
else:
return render_template('index.html', title = 'Diff 오류', logo = data['name'], data = '이 리비전이나 문서가 없습니다.')
else:
return render_template('index.html', title = 'Diff 오류', logo = data['name'], data = '이 리비전이나 문서가 없습니다.')
@app.route('/version')
def version():
return render_template('index.html', title = '버전', logo = data['name'], tn = 14)
@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'):
acl = '관리자'
else:
acl = '유저'
else:
acl = '일반'
else:
acl = '차단'
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.errorhandler(404)
def uncaughtError(error):
return ''
if __name__ == '__main__':
app.run(host = '0.0.0.0', port = int(data['port']))