ソースを参照

관리자 기능 접근성

2DU 9 年 前
コミット
de35932964
2 ファイル変更75 行追加19 行削除
  1. 59 5
      app.py
  2. 16 14
      templates/index.html

+ 59 - 5
app.py

@@ -37,6 +37,15 @@ def show_diff(seqm):
 def allowed_file(filename):
     return '.' in filename and \
            filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
+           
+def admincheck():
+    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'):
+                return 1
 
 def namumark(title, data):
     data = re.sub('<', '&lt;', data)
@@ -599,6 +608,7 @@ def recentchanges():
     curs.execute("select * from rc order by date desc limit 50")
     rows = curs.fetchall()
     if(rows):
+        admin = admincheck()
         while True:
             try:
                 a = rows[i]
@@ -623,7 +633,16 @@ def recentchanges():
                 leng = '<span style="color:red;">' + rows[i]['leng'] + '</span>'
             else:
                 leng = '<span style="color:gray;">' + rows[i]['leng'] + '</span>'
-            div = div + '<table style="width: 100%;"><tbody><tr><td style="text-align: center;width:33.33%;"><a href="/w/' + parse.quote(rows[i]['title']) + '">' + title + '</a> <a href="/history/' + parse.quote(rows[i]['title']) + '">(역사)</a> (' + leng + ')</td><td style="text-align: center;width:33.33%;">' + rows[i]['ip'] + '</td><td style="text-align: center;width:33.33%;">' + rows[i]['date'] + '</td></tr><tr><td colspan="3" style="text-align: center;width:100%;">' + send + '</td></tr></tbody></table>'
+            if(admin == 1):
+                curs.execute("select * from ban where block = '" + pymysql.escape_string(rows[i]['ip']) + "'")
+                row = curs.fetchall()
+                if(row):
+                    ip = rows[i]['ip'] + ' <a href="/ban/' + parse.quote(rows[i]['ip']) + '">(해제)</a>'
+                else:
+                    ip = rows[i]['ip'] + ' <a href="/ban/' + parse.quote(rows[i]['ip']) + '">(차단)</a>'
+            else:
+                ip = rows[i]['ip']
+            div = div + '<table style="width: 100%;"><tbody><tr><td style="text-align: center;width:33.33%;"><a href="/w/' + parse.quote(rows[i]['title']) + '">' + title + '</a> <a href="/history/' + parse.quote(rows[i]['title']) + '">(역사)</a> (' + leng + ')</td><td style="text-align: center;width:33.33%;">' + ip + '</td><td style="text-align: center;width:33.33%;">' + rows[i]['date'] + '</td></tr><tr><td colspan="3" style="text-align: center;width:100%;">' + send + '</td></tr></tbody></table>'
             i = i + 1
         return render_template('index.html', logo = data['name'], rows = div, tn = 3, title = '최근 변경내역')
     else:
@@ -686,6 +705,7 @@ def gethistory(name = None):
         curs.execute("select * from history where title = '" + pymysql.escape_string(name) + "' order by id+0 desc")
         rows = curs.fetchall()
         if(rows):
+            admin = admincheck()
             while True:
                 try:
                     a = rows[i]
@@ -707,7 +727,16 @@ def gethistory(name = None):
                     leng = '<span style="color:red;">' + rows[i]['leng'] + '</span>'
                 else:
                     leng = '<span style="color:gray;">' + rows[i]['leng'] + '</span>'
-                div = div + '<table style="width: 100%;"><tbody><tr><td style="text-align: center;width:33.33%;">r' + rows[i]['id'] + '</a> <a href="/w/' + parse.quote(rows[i]['title']) + '/r/' + rows[i]['id'] + '">(w)</a> <a href="/w/' + parse.quote(rows[i]['title']) + '/raw/' + rows[i]['id'] + '">(Raw)</a> <a href="/revert/' + parse.quote(rows[i]['title']) + '/r/' + rows[i]['id'] + '">(되돌리기)</a> (' + leng + ')</td><td style="text-align: center;width:33.33%;">' + rows[i]['ip'] + '</td><td style="text-align: center;width:33.33%;">' + rows[i]['date'] + '</td></tr><tr><td colspan="3" style="text-align: center;width:100%;">' + send + '</td></tr></tbody></table>'
+                if(admin == 1):
+                    curs.execute("select * from ban where block = '" + pymysql.escape_string(rows[i]['ip']) + "'")
+                    row = curs.fetchall()
+                    if(row):
+                        ip = rows[i]['ip'] + ' <a href="/ban/' + parse.quote(rows[i]['ip']) + '">(해제)</a>'
+                    else:
+                        ip = rows[i]['ip'] + ' <a href="/ban/' + parse.quote(rows[i]['ip']) + '">(차단)</a>'
+                else:
+                    ip = rows[i]['ip']
+                div = div + '<table style="width: 100%;"><tbody><tr><td style="text-align: center;width:33.33%;">r' + rows[i]['id'] + '</a> <a href="/w/' + parse.quote(rows[i]['title']) + '/r/' + rows[i]['id'] + '">(w)</a> <a href="/w/' + parse.quote(rows[i]['title']) + '/raw/' + rows[i]['id'] + '">(Raw)</a> <a href="/revert/' + parse.quote(rows[i]['title']) + '/r/' + rows[i]['id'] + '">(되돌리기)</a> (' + leng + ')</td><td style="text-align: center;width:33.33%;">' + ip + '</td><td style="text-align: center;width:33.33%;">' + rows[i]['date'] + '</td></tr><tr><td colspan="3" style="text-align: center;width:100%;">' + send + '</td></tr></tbody></table>'
                 i = i + 1
             return render_template('index.html', logo = data['name'], rows = div, tn = 5, title = name, page = parse.quote(name))
         else:
@@ -1122,7 +1151,11 @@ def sub(name = None, sub = None):
     else:
         ip = getip(request)
         ban = getdiscuss(ip, name, sub)
-        div = '<div>'
+        admin = admincheck()
+        if(admin == 1):
+            div = '<div>' + '<a href="/topic/' + parse.quote(name) + '/sub/' + parse.quote(sub) + '/close">(토론 닫기 및 열기)</a>' + ' <a href="/topic/' + parse.quote(name) + '/sub/' + parse.quote(sub) + '/stop">(토론 정지 및 재개)</a><br><br>'
+        else:
+            div = '<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()
@@ -1144,12 +1177,33 @@ def sub(name = None, sub = None):
                 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 = ' <a href="/topic/' + parse.quote(name) + '/sub/' + parse.quote(sub) + '/b/' + str(i + 1) + '">(해제)</a>'
+                    else:
+                        isblock = ' <a href="/topic/' + parse.quote(name) + '/sub/' + parse.quote(sub) + '/b/' + str(i + 1) + '">(블라인드)</a>'
+                    n = re.search("\- (?:Admin)$", rows[i]['ip'])
+                    if(n):
+                        ip = rows[i]['ip'] + isblock
+                    else:
+                        if(row):
+                            ip = rows[i]['ip'] + ' <a href="/ban/' + parse.quote(rows[i]['ip']) + '">(해제)</a>' + isblock
+                        else:
+                            ip = rows[i]['ip'] + ' <a href="/ban/' + parse.quote(rows[i]['ip']) + '">(차단)</a>' + isblock
+                else:
+                    ip = rows[i]['ip']
             if(rows[i]['ip'] == start):
                 j = i + 1
-                div = div + '<table id="toron"><tbody><tr><td id="toroncolorgreen"><a href="javascript:void(0);" id="' + str(j) + '">#' + str(j) + '</a> ' + rows[i]['ip'] + ' <span style="float:right;">' + rows[i]['date'] + '</span></td></tr><tr><td ' + block + '>' + indata + '</td></tr></tbody></table><br>'
+                div = div + '<table id="toron"><tbody><tr><td id="toroncolorgreen"><a href="javascript:void(0);" id="' + str(j) + '">#' + str(j) + '</a> ' + ip + ' <span style="float:right;">' + rows[i]['date'] + '</span></td></tr><tr><td ' + block + '>' + indata + '</td></tr></tbody></table><br>'
             else:
                 j = i + 1
-                div = div + '<table id="toron"><tbody><tr><td id="toroncolor"><a href="javascript:void(0);" id="' + str(j) + '">#' + str(j) + '</a> ' + rows[i]['ip'] + ' <span style="float:right;">' + rows[i]['date'] + '</span></td></tr><tr><td ' + block + '>' + indata + '</td></tr></tbody></table><br>'
+                div = div + '<table id="toron"><tbody><tr><td id="toroncolor"><a href="javascript:void(0);" id="' + str(j) + '">#' + str(j) + '</a> ' + ip + ' <span style="float:right;">' + rows[i]['date'] + '</span></td></tr><tr><td ' + block + '>' + indata + '</td></tr></tbody></table><br>'
             i = i + 1
         return render_template('index.html', title = name, page = parse.quote(name), suburl = parse.quote(sub), sub = sub, logo = data['name'], rows = div, tn = 11, ban = ban)
 

+ 16 - 14
templates/index.html

@@ -296,7 +296,7 @@
 				<li>기타 문서</li>
 				<li>랜덤 구현</li>
 				<h2>0.2 ~ 0.9 (베타)</h2>
-				<li>그 외 엄청나게 많은 기능 구현 (기존 <a href="https://github.com/2DU/OWNET">Ownet</a> 기능에서 로그인 필요한 기능 빼고 구현)</li>
+				<li>그 외 엄청나게 많은 기능 구현 (기존 <a class="out_link" href="https://github.com/2DU/OWNET">Ownet</a> 기능에서 로그인 필요한 기능 빼고 구현)</li>
 				<h2>1.0</h2>
 				<li>로그인 구현</li>
 				<h2>1.1</h2>
@@ -305,20 +305,22 @@
 				<li>블라인드 구현</li>
 				<li>ACL 기능 구현</li>
 				<li>어드민 부여 구현</li>
-				<h2>1.2 (진행중)</h2>
-                <li>미리보기 구현 (완료)</li>
-				<li>대역 차단 구현 (완료)</li>
-				<li>diff 구현 (완료)</li>
-                <li>파일 업로드 개선 (완료)</li>
-                <li>파일 업로드 구현 (완료)</li>
-				<li>기본적인 다중 검사 기능 (완료)</li>
-                <h2>1.3</h2>
+				<h2>1.2</h2>
+                <li>미리보기 구현</li>
+				<li>대역 차단 구현</li>
+				<li>diff 구현</li>
+                <li>파일 업로드 개선</li>
+                <li>파일 업로드 구현</li>
+				<li>기본적인 다중 검사 기능</li>
+                <h2>1.3 (진행중)</h2>
                 <li>토론 목록 보강</li>
-                <li>파일 문서 생성</li>
                 <li>설계 약간 변경</li>
                 <li>하위 문서 지원</li>
-                <li>관리자 기능의 접근성 향상</li>
+                <li>관리자 기능의 접근성 향상 (완료)</li>
+                <h2>1.4</h2>
+                <li>관리자 기능 접근성</li>
                 <li>사용자 문서 생성</li>
+                <li>파일 문서 생성</li>
 				<h2>계속</h2>
 				<li>버그 수정</li>
 				<li>파서 제작</li>
@@ -326,11 +328,11 @@
 				<h2>파이나무 라이선스</h2>
 				<li>미정</li>
 				<h2>외부 파일 라이선스</h2>
-				<li>인용문 아이콘 <a href="http://www.flaticon.com/free-icon/quote-left_25672">Dave Gandy</a> CC 3.0 BY</li>
-				<li>일부 파일 <a href="https://twitter.com/Basix1120">Basix</a></li>
+				<li>인용문 아이콘 <a class="out_link" href="http://www.flaticon.com/free-icon/quote-left_25672">Dave Gandy</a> CC 3.0 BY</li>
+				<li>일부 파일 <a class="out_link" href="https://twitter.com/Basix1120">Basix</a></li>
 				<br>
 				<h2>기타</h2>
-				<li>현재 버전 1.3.0 - Beta</li>
+				<li>현재 버전 1.3.1 - Beta <s>정식 버전은 10.0이라더라.</s></li>
 			</div>
 			{% elif tn == 15 %}
 			<h1 class="title">{{title}}</h1>