Sfoglia il codice sorgente

Merge branch 'stable' of https://github.com/2DU/openNAMU into stable

Surplus_Up (2DU) 8 anni fa
parent
commit
2dba82064a
9 ha cambiato i file con 492 aggiunte e 440 eliminazioni
  1. 192 264
      app.py
  2. 125 16
      func.py
  3. 2 1
      language/en-US.json
  4. 106 105
      language/ko-KR.json
  5. 1 1
      language/test.py
  6. 30 26
      mark.py
  7. 26 21
      set_mark/namu.py
  8. 9 5
      set_mark/tool.py
  9. 1 1
      views/acme/index.html

File diff suppressed because it is too large
+ 192 - 264
app.py


+ 125 - 16
func.py

@@ -42,13 +42,121 @@ def captcha_get():
 
     return data
 
-def captcha_post(test, num = 1):
+def update():
+    # 호환성 설정
+    try:
+        curs.execute("alter table history add hide text default ''")
+        
+        curs.execute('select title, re from hidhi')
+        for rep in curs.fetchall():
+            curs.execute("update history set hide = 'O' where title = ? and id = ?", [rep[0], rep[1]])
+
+        curs.execute("drop table if exists hidhi")
+
+        print('move table hidhi')
+    except:
+        pass
+
+    try:
+        curs.execute("alter table user add date text default ''")
+
+        print('user table add column date')
+    except:
+        pass
+
+    try:
+        curs.execute("alter table rb add band text default ''")
+
+        print('rb table add column band')
+    except:
+        pass
+
+    try:
+        curs.execute("alter table ban add login text default ''")
+
+        print('ban table add column login')
+    except:
+        pass
+
+    try:
+        curs.execute("select title, acl from data where acl != ''")
+        for rep in curs.fetchall():
+            curs.execute("insert into acl (title, dec, dis, why) values (?, ?, '', '')", [rep[0], rep[1]])
+
+        curs.execute("alter table data drop acl")
+
+        print('data table delete column acl')
+    except:
+        pass
+
+    try:
+        curs.execute("alter table user add email text default ''")
+
+        print('user table add column email')
+    except:
+        pass
+
+    try:
+        curs.execute('select name, sub from filter where sub != "X" and sub != ""')
+        filter_name = curs.fetchall()
+        if filter_name:
+            for filter_delete in filter_name:
+                if filter_delete[1] != '' or filter_delete[1] != 'X':
+                    curs.execute("update filter set sub = '' where name = ?", [filter_delete[0]])
+
+            print('filter data fix')
+    except:
+        pass
+
+    try:
+        curs.execute("alter table user add skin text default ''")
+
+        print('user table add column skin')
+    except:
+        pass
+
+    # 3.0.5 사용자 문서, 파일 문서, 분류 문서 영어화
+    try:
+        all_rep = [['사용자:', 'user:'], ['파일:', 'file:'], ['분류:', 'category:']]
+        all_rep2 = ['data', 'history', 'acl', 'topic', 'back']
+
+        for i in range(3):
+            for j in range(6):
+                if not j == 5:
+                    curs.execute('select title from ' + all_rep2[j] + ' where title like ?', [all_rep[i][0] + '%'])
+                else:
+                    curs.execute('select link from back where link like ?', [all_rep[i][0] + '%'])
+
+                user_rep = curs.fetchall()
+                for user_rep2 in user_rep:
+                    first = re.sub('^' + all_rep[i][0], all_rep[i][1], user_rep2[0])
+
+                    if j == 0:
+                        curs.execute("update data set title = ? where title = ?", [first, user_rep2[0]])
+                    elif j == 1:
+                        curs.execute("update history set title = ? where title = ?", [first, user_rep2[0]])
+                    elif j == 2:
+                        curs.execute("update acl set title = ? where title = ?", [first, user_rep2[0]])
+                    elif j == 3:
+                        curs.execute("update topic set title = ? where title = ?", [first, user_rep2[0]])
+                    elif j == 4:
+                        curs.execute("update back set title = ? where title = ?", [first, user_rep2[0]])
+                    elif j == 5:
+                        curs.execute("update back set link = ? where link = ?", [first, user_rep2[0]])
+
+        print('사용자 to user, 파일 to file, 분류 to category')
+    except:
+        pass
+
+    conn.commit()
+
+def captcha_post(re_data, num = 1):
     if num == 1:
         if custom()[2] == 0 and captcha_get() != '':
             curs.execute('select data from other where name = "sec_re"')
             sec_re = curs.fetchall()
             if sec_re and sec_re[0][0] != '':
-                data = requests.get('https://www.google.com/recaptcha/api/siteverify', params = { 'secret' : sec_re, 'response' : test })
+                data = requests.get('https://www.google.com/recaptcha/api/siteverify', params = { 'secret' : sec_re, 'response' : re_data })
                 if not data:
                     return 0
                 else:
@@ -84,9 +192,12 @@ def load_lang(data):
             return lang[data]
         else:
             return else_lang[data]
-
-def namumark_re(name = '', data = '', set_num = 0):
-    return namumark(name, data, set_num, load_lang('please_all'))
+            
+def ip_or_user(data):
+    if re.search('(\.|:)', data):
+        return 1
+    else:
+        return 0
 
 def edit_help_button():
     # https://stackoverflow.com/questions/11076975/insert-text-into-textarea-at-cursor-position-javascript
@@ -162,8 +273,8 @@ def next_fix(link, num, page, end = 50):
 
     return list_data
 
-def other2(origin):
-    return origin + ['Deleted']
+def other2(data):
+    return data + ['Deleted']
 
 def wiki_set(num = 1):
     if num == 1:
@@ -243,8 +354,6 @@ def admin_check(num, what):
         while 1:
             if num == 1 and reset == 0:
                 check = 'ban'
-            elif num == 2 and reset == 0:
-                check = 'mdel'
             elif num == 3 and reset == 0:
                 check = 'toron'
             elif num == 4 and reset == 0:
@@ -289,14 +398,14 @@ def ip_pas(raw_ip):
             ip = raw_ip
             hide = 1
     else:
-        curs.execute("select title from data where title = ?", [load_lang('user') + ':' + raw_ip])
+        curs.execute("select title from data where title = ?", ['user:' + raw_ip])
         if curs.fetchall():
-            ip = '<a href="/w/' + url_pas(load_lang('user') + ':' + raw_ip) + '">' + raw_ip + '</a>'
+            ip = '<a href="/w/' + url_pas('user:' + raw_ip) + '">' + raw_ip + '</a>'
         else:
-            ip = '<a id="not_thing" href="/w/' + url_pas(load_lang('user') + ':' + raw_ip) + '">' + raw_ip + '</a>'
+            ip = '<a id="not_thing" href="/w/' + url_pas('user:' + raw_ip) + '">' + raw_ip + '</a>'
          
     if hide == 0:
-        ip += ' <a href="/record/' + url_pas(raw_ip) + '">(' + load_lang('record') + ')</a>'
+        ip += ' <a href="/record/' + url_pas('user:' + raw_ip) + '">(' + load_lang('record') + ')</a>'
 
     return ip
 
@@ -338,14 +447,14 @@ def acl_check(name):
     if ban_check() == 1:
         return 1
 
-    acl_c = re.search("^" + load_lang('user') + ":([^/]*)", name)
+    acl_c = re.search("^user:([^/]*)", name)
     if acl_c:
         acl_n = acl_c.groups()
 
         if admin_check(5, None) == 1:
             return 0
 
-        curs.execute("select dec from acl where title = ?", [load_lang('user') + ':' + acl_n[0]])
+        curs.execute("select dec from acl where title = ?", ['user:' + acl_n[0]])
         acl_data = curs.fetchall()
         if acl_data:
             if acl_data[0][0] == 'all':
@@ -362,7 +471,7 @@ def acl_check(name):
         else:
             return 1
 
-    file_c = re.search("^" + load_lang('file') + ":(.*)", name)
+    file_c = re.search("^file:(.*)", name)
     if file_c and admin_check(5, 'edit (' + name + ')') != 1:
         return 1
 

+ 2 - 1
language/en-US.json

@@ -2,7 +2,8 @@
     "edit" : "Edit",
     "history" : "History",
     "delete" : "Delete",
-    "bulk_delete" : "Bulk Delete",
+    "easy" : "Easy",
+    "server" : "Server",
     "edit_filter" : "Edit Filtering",
     "template" : "Template",
     "move" : "Move",

+ 106 - 105
language/ko-KR.json

@@ -1,107 +1,108 @@
 {
-    "edit": "편집",
-    "history": "역사",
-    "delete": "삭제",
-    "bulk_delete": "대량 삭제",
-    "edit_filter": "편집 필터",
-    "move": "이동",
-    "hide": "숨김",
-    "list": "목록",
-    "revert": "되돌리기",
-    "version": "판",
-    "normal_version": "버전",
-    "document": "문서",
-    "all": "모든",
-    "ban": "차단",
-    "release": "해제",
-    "save": "저장",
-    "other": "기타",
-    "tool": "도구",
-    "plus": "추가",
-    "open": "열린",
-    "search": "검색",
-    "user": "사용자",
-    "alarm": "알림",
-    "watchlist": "주시 문서",
-    "my_info": "내 정보",
-    "recent": "최근",
-    "recent_changes": "최근 변경",
-    "discussion": "토론",
-    "login": "로그인",
-    "logout": "로그아웃",
-    "register": "회원가입",
-    "no_alarm": " 알림이 없습니다.",
-    "able": "가능",
-    "year": "년",
-    "month": "월",
-    "day": "일",
-    "normal": "일반",
-    "subscriber": "가입자",
-    "admin": "관리자",
-    "owner": "소유자",
-    "admin_group": "관리 그룹",
-    "user_css_warring": "비 로그인의 경우에는 사용자 CSS가 로그인하거나 브라우저 닫으면 날아갑니다.",
-    "http_warring": "주의 : 만약 HTTPS 연결이 아닌 경우 데이터가 유출될 가능성이 있습니다. 이에 대해 책임지지 않습니다.",
-    "new": "새",
-    "need": "필요한",
-    "upload": "파일 올리기",
-    "record": "기록",
-    "name": "이름",
-    "license": "라이선스",
-    "interwiki": "인터위키",
-    "update": "업데이트",
-    "setting": "설정",
-    "create": "생성",
-    "editor": "수정자",
-    "hour": "시간",
-    "time": "시각",
-    "close": "닫기",
-    "stop": "정지",
-    "restart": "재시작",
-    "agreement": "합의",
-    "backlink": "역링크",
-    "why": "사유",
-    "random": "무작위",
-    "authority": "권한",
-    "file": "파일",
-    "change": "변경",
-    "compare": "비교",
-    "count": "횟수",
-    "check": "검사",
-    "preview": "미리보기",
-    "next": "다음",
-    "previous": "이전",
-    "no_login_warring": "비 로그인 상태로 진행 시 IP가 기록될 수 있습니다.",
-    "state": "상태",
-    "limitless": "무기한",
-    "period": "기간",
-    "now": "현재",
-    "blocked": "차단자",
-    "band": "대역",
-    "notice": "공지",
-    "writer": "작성자",
-    "upper": "상위",
-    "under": "하위",
-    "pass": "통과",
-    "category": "분류",
-    "authority_error": "권한이 부족합니다.",
-    "no_login_error": "비 로그인 상태 입니다.",
-    "no_exist_user_error": "계정이 없습니다.",
-    "no_admin_block_error": "관리자는 차단, 검사 할 수 없습니다.",
-    "same_id_exist_error": "동일한 아이디의 사용자가 있습니다.",
-    "long_id_error": "아이디는 20글자보다 짧아야 합니다.",
-    "id_char_error": "아이디에는 한글과 알파벳과 공백만 허용 됩니다.",
-    "file_exist_error": "파일이 없습니다.",
-    "password_error": "비밀번호가 다릅니다.",
-    "recaptcha_error": "리캡차를 통과하세요.",
-    "file_extension_error": "jpg, gif, jpeg, png, webp만 가능 합니다.",
-    "edit_record_error": "편집 기록은 500자를 넘을 수 없습니다.",
-    "same_file_error": "동일한 이름의 파일이 있습니다.",
-    "file_capacity_error": "파일 최대 용량 (MB) :",
-    "decument_exist_error": "내용이 원래 문서와 동일 합니다.",
-    "password_diffrent_error": "재 확인 비밀번호와 입력 비밀번호가 다릅니다.",
-    "edit_filter_error": "편집 필터에 의해 검열 되었습니다.",
-    "file_name_error": "파일 이름은 알파벳, 한글, 띄어쓰기, 언더바, 빼기표만 허용 됩니다.",
-    "template": "틀",
-    "out": "외부"
+    "edit" : "편집",
+    "history" : "역사",
+    "easy" : "간단",
+    "delete" : "삭제",
+    "server" : "서버",
+    "edit_filter" : "편집 필터",
+    "move" : "이동",
+    "hide" : "숨김",
+    "list" : "목록",
+    "revert" : "되돌리기",
+    "version" : "판",
+    "normal_version" : "버전",
+    "document" : "문서",
+    "all" : "모든",
+    "ban" : "차단",
+    "release" : "해제",
+    "save" : "저장",
+    "other" : "기타",
+    "tool" : "도구",
+    "plus" : "추가",
+    "open" : "열린",
+    "search" : "검색",
+    "user" : "사용자",
+    "alarm" : "알림",
+    "watchlist" : "주시 문서",
+    "my_info" : "내 정보",
+    "recent" : "최근",
+    "recent_changes" : "최근 변경",
+    "discussion" : "토론",
+    "login" : "로그인",
+    "logout" : "로그아웃",
+    "register" : "회원가입",
+    "no_alarm" : " 알림이 없습니다.",
+    "able" : "가능",
+    "year" : "년",
+    "month" : "월",
+    "day" : "일",
+    "normal" : "일반",
+    "subscriber" : "가입자",
+    "admin" : "관리자",
+    "owner" : "소유자",
+    "admin_group" : "관리 그룹",
+    "user_css_warring" : "비 로그인의 경우에는 사용자 CSS가 로그인하거나 브라우저 닫으면 날아갑니다.",
+    "http_warring" : "주의 : 만약 HTTPS 연결이 아닌 경우 데이터가 유출될 가능성이 있습니다. 이에 대해 책임지지 않습니다.",
+    "new" : "새",
+    "need" : "필요한",
+    "upload" : "파일 올리기",
+    "record" : "기록",
+    "name" : "이름",
+    "license" : "라이선스",
+    "interwiki" : "인터위키",
+    "update" : "업데이트",
+    "setting" : "설정",
+    "create" : "생성",
+    "editor" : "수정자",
+    "hour" : "시간",
+    "time" : "시각",
+    "close" : "닫기",
+    "stop" : "정지",
+    "restart" : "재시작",
+    "agreement" : "합의",
+    "backlink" : "역링크",
+    "why" : "사유",
+    "random" : "무작위",
+    "authority" : "권한",
+    "file" : "파일",
+    "change" : "변경",
+    "compare" : "비교",
+    "count" : "횟수",
+    "check" : "검사",
+    "preview" : "미리보기",
+    "next" : "다음",
+    "previous" : "이전",
+    "no_login_warring" : "비 로그인 상태로 진행 시 IP가 기록될 수 있습니다.",
+    "state" : "상태",
+    "limitless" : "무기한",
+    "period" : "기간",
+    "now" : "현재",
+    "blocked" : "차단자",
+    "band" : "대역",
+    "notice" : "공지",
+    "writer" : "작성자",
+    "upper" : "상위",
+    "under" : "하위",
+    "pass" : "통과",
+    "category" : "분류",
+    "authority_error" : "권한이 부족합니다.",
+    "no_login_error" : "비 로그인 상태 입니다.",
+    "no_exist_user_error" : "계정이 없습니다.",
+    "no_admin_block_error" : "관리자는 차단, 검사 할 수 없습니다.",
+    "same_id_exist_error" : "동일한 아이디의 사용자가 있습니다.",
+    "long_id_error" : "아이디는 20글자보다 짧아야 합니다.",
+    "id_char_error" : "아이디에는 한글과 알파벳과 공백만 허용 됩니다.",
+    "file_exist_error" : "파일이 없습니다.",
+    "password_error" : "비밀번호가 다릅니다.",
+    "recaptcha_error" : "리캡차를 통과하세요.",
+    "file_extension_error" : "jpg, gif, jpeg, png, webp만 가능 합니다.",
+    "edit_record_error" : "편집 기록은 500자를 넘을 수 없습니다.",
+    "same_file_error" : "동일한 이름의 파일이 있습니다.",
+    "file_capacity_error" : "파일 최대 용량 (MB) :",
+    "decument_exist_error" : "내용이 원래 문서와 동일 합니다.",
+    "password_diffrent_error" : "재 확인 비밀번호와 입력 비밀번호가 다릅니다.",
+    "edit_filter_error" : "편집 필터에 의해 검열 되었습니다.",
+    "file_name_error" : "파일 이름은 알파벳, 한글, 띄어쓰기, 언더바, 빼기표만 허용 됩니다.",
+    "template" : "틀",
+    "out" : "외부"
 }

+ 1 - 1
language/test.py

@@ -15,4 +15,4 @@ for a_in in a_json:
         c = input()
         b_json[a_in] = c
         
-print(str(b_json).replace(', ', ',\n    ').replace('{', '{\n    ').replace('}', '\n}').replace('\'', '"'))
+print(str(b_json).replace('", ', '",\n    ').replace('{', '{\n    ').replace('}', '\n}').replace('\'', '"'))

+ 30 - 26
mark.py

@@ -1,4 +1,4 @@
-from set_mark.start import start
+from set_mark.namu import namu
 
 import re
 import html
@@ -15,12 +15,13 @@ def load_conn2(data):
     curs = conn.cursor()
 
 def send_parser(data):
-    data = html.escape(data)
-    
-    javascript = re.compile('javascript:', re.I)
-    
-    data = javascript.sub('', data)
-    data = re.sub('&lt;a href="(?:[^"]*)"&gt;(?P<in>(?:(?!&lt;).)*)&lt;\/a&gt;', '<a href="' + parse.quote('\g<in>').replace('/','%2F') + '">\g<in></a>', data)  
+    if not re.search('^<br>$', data):
+        data = html.escape(data)
+        
+        javascript = re.compile('javascript:', re.I)
+        
+        data = javascript.sub('', data)
+        data = re.sub('&lt;a href=&quot;(?:(?:(?!&quot;).)*)&quot;&gt;(?P<in>(?:(?!&lt;).)*)&lt;\/a&gt;', '<a href="' + parse.quote('\g<in>').replace('/','%2F') + '">\g<in></a>', data)
     
     return data
     
@@ -29,22 +30,25 @@ def plusing(name, link, backtype):
     if not curs.fetchall():
         curs.execute("insert into back (title, link, type) values (?, ?, ?)", [link, name, backtype])
 
-def namumark(title, data, num, lang):
-    data = start(conn, data, title, lang)
-    if num == 1:
-        i = 0
-        while 1:
-            try:
-                _ = data[2][i][0]
-            except:
-                break
-
-            thread_start = threading.Thread(target = plusing, args = [data[2][i][0], data[2][i][1], data[2][i][2]])
-            thread_start.start()
-            thread_start.join()
-
-            i += 1
-
-        conn.commit()
-        
-    return data[0] + data[1]
+def namumark(title = '', data = '', num = 0):
+    if not data == '':
+        data = namu(conn, data, title)
+        if num == 1:
+            i = 0
+            while 1:
+                try:
+                    _ = data[2][i][0]
+                except:
+                    break
+
+                thread_start = threading.Thread(target = plusing, args = [data[2][i][0], data[2][i][1], data[2][i][2]])
+                thread_start.start()
+                thread_start.join()
+
+                i += 1
+
+            conn.commit()
+            
+        return data[0] + data[1]
+    else:
+        return '404 Not Found.'

+ 26 - 21
set_mark/start.py → set_mark/namu.py

@@ -167,6 +167,10 @@ def link_fix(main_link):
     if re.search('^:', main_link):
         main_link = re.sub('^:', '', main_link)
 
+    main_link = re.sub('^사용자:', 'user:', main_link)
+    main_link = re.sub('^파일:', 'file:', main_link)
+    main_link = re.sub('^분류:', 'category:', main_link)
+
     other_link = re.search('(#.+)$', main_link)
     if other_link:
         other_link = other_link.groups()[0]
@@ -177,7 +181,7 @@ def link_fix(main_link):
         
     return [main_link, other_link]
 
-def start(conn, data, title, lang):
+def namu(conn, data, title,):
     # DB 지정
     curs = conn.cursor()
 
@@ -256,7 +260,7 @@ def start(conn, data, title, lang):
                     else:
                         break
 
-                include_parser = re.sub('\[\[' + lang['template'] + ':(((?!\]\]|#include).)+)\]\]', '', include_parser)
+                include_parser = re.sub('\[\[(?:category|분류):(((?!\]\]|#include).)+)\]\]', '', include_parser)
                 include_parser = html.escape(include_parser)
 
                 data = re.sub('\[include\(((?:(?!\)\]).)+)\)\]', '<include>\n<a id="include_link" href="/w/' + tool.url_pas(include_link) + '">[' + include_link + ']</a>\n' + include_parser + '\n</include>', data, 1)
@@ -402,7 +406,7 @@ def start(conn, data, title, lang):
                                                             else:
                                                                 folding_data = ['Test']
                                                             
-                                                            data = re.sub('{{{#!folding ?((?:(?!\n).)*)\n?', '<div>' + str(folding_data[0]) + ' <div style="display: inline-block;"><a href="javascript:void(0);" onclick="folding(' + str(fol_num) + ');">[Do]</a></div_end><div id="folding_' + str(fol_num) + '" style="display: none;"><div id="wiki_div" style="">', data, 1)
+                                                            data = re.sub('{{{#!folding ?((?:(?!\n).)*)\n?', '<div>' + str(folding_data[0]) + ' <div style="display: inline-block;"><a href="javascript:void(0);" onclick="folding(' + str(fol_num) + ');">[0to1]</a></div_end><div id="folding_' + str(fol_num) + '" style="display: none;"><div id="wiki_div" style="">', data, 1)
                                                             
                                                             fol_num += 1
                                                         else:
@@ -494,13 +498,14 @@ def start(conn, data, title, lang):
         math = re.search('&lt;math&gt;((?:(?!&lt;\/math&gt;).)+)&lt;\/math&gt;', data)
         if math:
             if first == 0:
-                plus_data += '''
-                            <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.9.0/katex.min.css"
-                                integrity="sha384-TEMocfGvRuD1rIAacqrknm5BQZ7W7uWitoih+jMNFXQIbNl16bO8OZmylH/Vi/Ei"
-                                crossorigin="anonymous">
-                            <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.9.0/katex.min.js" 
-                                integrity="sha384-jmxIlussZWB7qCuB+PgKG1uLjjxbVVIayPJwi6cG6Zb4YKq0JIw+OMnkkEC7kYCq"
-                                crossorigin="anonymous"></script>'''
+                plus_data +=    '''
+                                <link   rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.9.0/katex.min.css"
+                                        integrity="sha384-TEMocfGvRuD1rIAacqrknm5BQZ7W7uWitoih+jMNFXQIbNl16bO8OZmylH/Vi/Ei"
+                                        crossorigin="anonymous">
+                                <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.9.0/katex.min.js" 
+                                        integrity="sha384-jmxIlussZWB7qCuB+PgKG1uLjjxbVVIayPJwi6cG6Zb4YKq0JIw+OMnkkEC7kYCq"
+                                        crossorigin="anonymous"></script>
+                                '''
 
             math = math.groups()[0]
             
@@ -592,7 +597,7 @@ def start(conn, data, title, lang):
 
             all_stack = re.sub('0.', '', all_stack)
             
-            data = re.sub('\n(={1,6}) ?((?:(?!\n).)+) ?\n', '\n<h' + toc_number + ' id="s-' + re.sub('\.$', '', all_stack) + '"><a href="#toc">' + all_stack + '</a> ' + re.sub('=*$', '', toc[1]) + ' <span style="font-size: 12px"><a href="/edit/' + tool.url_pas(title) + '?section=' + str(edit_number) + '">(' + lang['edit'] + ')</a></span></h' + toc_number + '>\n', data, 1)
+            data = re.sub('\n(={1,6}) ?((?:(?!\n).)+) ?\n', '\n<h' + toc_number + ' id="s-' + re.sub('\.$', '', all_stack) + '"><a href="#toc">' + all_stack + '</a> ' + re.sub('=*$', '', toc[1]) + ' <span style="font-size: 12px"><a href="/edit/' + tool.url_pas(title) + '?section=' + str(edit_number) + '">(Edit)</a></span></h' + toc_number + '>\n', data, 1)
             
             toc_data += '<span style="margin-left: ' + str((toc_full - toc_top_stack) * 10) + 'px;"><a href="#s-' + re.sub('\.$', '', all_stack) + '">' + all_stack + '</a> ' + re.sub('\[\*((?:(?! |\]).)*)(?: ((?:(?!\]).)+))?\]', '', re.sub('=*$', '', toc[1])) + '</span>\n'
         else:
@@ -779,7 +784,7 @@ def start(conn, data, title, lang):
             break
 
     # 링크 관련 문법 구현
-    category = '\n<hr><div id="cate">' + lang['category'] + ': '
+    category = '\n<hr><div id="cate">Category : '
     while 1:
         link = re.search('\[\[((?:(?!\[\[|\]\]).)+)\]\]', data)
         if link:
@@ -795,7 +800,7 @@ def start(conn, data, title, lang):
                 main_link = link
                 see_link = link
 
-            if re.search('^(' + lang['file'] + '|' + lang['out'] + '):', main_link):
+            if re.search('^((?:file|파일)|(?:out|외부)):', main_link):
                 file_style = ''
 
                 width = re.search('width=((?:(?!&).)+)', see_link)
@@ -824,13 +829,13 @@ def start(conn, data, title, lang):
                 else:
                     file_align = ''
 
-                if re.search('^' + lang['out'] + ':', main_link):
-                    file_src = re.sub('^' + lang['out'] + ':', '', main_link)
+                if re.search('^(?:out|외부):', main_link):
+                    file_src = re.sub('^(?:out|외부):', '', main_link)
             
                     file_alt = main_link
                     exist = 'Yes'
                 else:
-                    file_data = re.search('^' + lang['file'] + ':((?:(?!\.).)+)\.(.+)$', main_link)
+                    file_data = re.search('^(?:file|파일):((?:(?!\.).)+)\.(.+)$', main_link)
                     if file_data:
                         file_data = file_data.groups()
                         file_name = file_data[0]
@@ -842,7 +847,7 @@ def start(conn, data, title, lang):
                         file_end = 'jpg'
 
                     file_src = '/image/' + tool.sha224(file_name) + '.' + file_end
-                    file_alt = '' + lang['file'] + ':' + file_name + '.' + file_end
+                    file_alt = 'file:' + file_name + '.' + file_end
 
                     curs.execute("select title from data where title = ?", [file_alt])
                     exist = curs.fetchall()
@@ -851,9 +856,9 @@ def start(conn, data, title, lang):
                     data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '<span style="' + file_align + '"><img style="' + file_style + '" alt="' + file_alt + '" src="' + file_src + '"></span>', data, 1)
                 else:
                     data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '<a id="not_thing" href="/w/' + tool.url_pas(file_alt) + '">' + file_alt + '</a>', data, 1)
-            elif re.search('^' + lang['category'] + ':', main_link):
+            elif re.search('^(?:category|분류):', main_link):
                 see_link = re.sub('#include', '', see_link)
-                main_link = re.sub('#include', '', main_link)
+                main_link = re.sub('#include', '', re.sub('^(?:category|분류):', 'category:', main_link))
 
                 if re.search('#blur', main_link):
                     see_link = 'Hidden'
@@ -865,7 +870,7 @@ def start(conn, data, title, lang):
 
                 backlink += [[title, main_link, 'cat']]
 
-                category += '<a ' + link_id + ' href="' + tool.url_pas(main_link) + '">' + re.sub('^' + lang['category'] + ':', '', see_link) + '</a> / '
+                category += '<a ' + link_id + ' href="' + tool.url_pas(main_link) + '">' + re.sub('^(?:category|분류):', '', see_link) + '</a> / '
                 data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '', data, 1)
             elif re.search('^wiki:', main_link):
                 data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '<a id="inside" href="/' + tool.url_pas(re.sub('^wiki:', '', main_link)) + '">' + see_link + '</a>', data, 1)
@@ -1004,7 +1009,7 @@ def start(conn, data, title, lang):
     category += '</div>'
     category = re.sub(' / <\/div>$', '</div>', category)
 
-    if category == '\n<hr><div id="cate">' + lang['category'] + ': </div>':
+    if category == '\n<hr><div id="cate">Category : </div>':
         category = ''
 
     data += category

+ 9 - 5
set_mark/tool.py

@@ -12,19 +12,23 @@ def ip_check():
         ip = flask.session['DREAMER']
     else:
         try:
-            ip = flask.request.environ.get('HTTP_X_FORWARDED_FOR', flask.request.remote_addr)
+            ip = flask.request.environ.get('HTTP_X_REAL_IP', flask.request.environ.get('HTTP_X_FORWARDED_FOR', flask.request.remote_addr))
+            
+            if ip == ('::1' or '127.0.0.1'):
+                ip = flask.request.environ.get('HTTP_X_FORWARDED_FOR', flask.request.remote_addr)
         except:
-            ip = 'None'
+            ip = 'Error'
 
     return str(ip)
 
 def savemark(data):
     data = re.sub("\[date\(now\)\]", get_time(), data)
     
-    if not re.search("\.", ip_check()):
-        name = '[[사용자:' + ip_check() + '|' + ip_check() + ']]'
+    ip = ip_check()
+    if not re.search("\.", ip):
+        name = '[[사용자:' + ip + '|' + ip + ']]'
     else:
-        name = ip_check()
+        name = ip
         
     data = re.sub("\[name\]", name, data)
 

+ 1 - 1
views/acme/index.html

@@ -157,7 +157,7 @@
                             <a href="https://github.com/2DU/openNAMU">
                                 <img src="/views/acme/img/on2.png" alt="opennamu" style="width: 100px;">
                             </a>
-                            <a href="/views/acme/list.html">기여자</a>
+                            <a href="/views/acme/list.html">Contributor</a>
                         </span>    
                     </div>
                 </div>

Some files were not shown because too many files changed in this diff