2du 4 лет назад
Родитель
Сommit
ecedb94956
3 измененных файлов с 55 добавлено и 25 удалено
  1. 22 9
      route/main_func_setting.py
  2. 32 15
      route/tool/func.py
  3. 1 1
      version.json

+ 22 - 9
route/main_func_setting.py

@@ -536,20 +536,29 @@ def main_func_setting(db_set, num = 0):
 
                 security_radios = ''
                 for i in ['tls', 'starttls', 'plain']:
-                    security_radios += '<input name="smtp_security" type="radio" value="' + i + '" ' + ('checked' if d_list[4] == i else '') + '>' + i + '<hr class="main_hr">'
+                    if d_list[4] == i:
+                        security_radios = '<option value="' + i + '">' + i + '</option>' + security_radios
+                    else:
+                        security_radios += '<option value="' + i + '">' + i + '</option>'
 
+                re_ver_list = {
+                    '' : 'reCAPTCHA v2',
+                    'v3' : 'reCAPTCHA v3',
+                    'h' : 'hCAPTCHA'
+                }
                 re_ver = ''
-                if d_list[7] == '':
-                    re_ver += '<option value="">v2</option><option value="v3">v3</option>'
-                else:
-                    re_ver += '<option value="v3">v3</option><option value="">v2</option>'
+                for i in re_ver_list:
+                    if d_list[7] == i:
+                        re_ver = '<option value="' + i + '">' + re_ver_list[i] + '</option>' + re_ver
+                    else:
+                        re_ver += '<option value="' + i + '">' + re_ver_list[i] + '</option>'
 
                 return easy_minify(flask.render_template(skin_check(),
                     imp = [load_lang('ext_api_req_set'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
                     data = '''
                         <form method="post" id="main_set_data">
-                            <h2>1. ''' + load_lang('recaptcha') + '''</h2>
-                            <a href="https://www.google.com/recaptcha/admin">(Google)</a>
+                            <h2>1. ''' + load_lang('captcha') + '''</h2>
+                            <a href="https://www.google.com/recaptcha/">(''' + load_lang('recaptcha') + ''')</a> <a href="https://www.hcaptcha.com/">(''' + load_lang('hcaptcha') + ''')</a>
                             <hr class="main_hr">
 
                             <span>''' + load_lang('public_key') + '''</span>
@@ -562,6 +571,8 @@ def main_func_setting(db_set, num = 0):
                             <input name="sec_re" value="''' + html.escape(d_list[1]) + '''">
                             <hr class="main_hr">
 
+                            <span>''' + load_lang('version') + '''</span>
+                            <hr class="main_hr">
                             <select name="recaptcha_ver">
                                 ''' + re_ver + '''
                             </select>
@@ -586,7 +597,9 @@ def main_func_setting(db_set, num = 0):
 
                             <span>''' + load_lang('smtp_security') + '''</span>
                             <hr class="main_hr">
-                            ''' + security_radios + '''
+                            <select name="recaptcha_ver">
+                                ''' + security_radios + '''
+                            </select>
                             <hr class="main_hr">
 
                             <span>''' + load_lang('smtp_username') + '''</span>
@@ -598,7 +611,7 @@ def main_func_setting(db_set, num = 0):
                             <hr class="main_hr">
                             <input type="password" name="smtp_pass" value="''' + html.escape(d_list[6]) + '''">
 
-                            <h2>3. ''' + load_lang('oauth') + '''</h2>
+                            <h2>3. ''' + load_lang('oauth') + ''' (''' + load_lang('incomplete') + ''')</h2>
                             <a href="https://developers.google.com/identity/protocols/oauth2">(Google)</a>
                             <hr class="main_hr">
 

+ 32 - 15
route/tool/func.py

@@ -78,7 +78,7 @@ import pymysql
 
 if sys.version_info < (3, 6):
     import sha3
-   
+
 # Init-Global
 global_lang = {}
 global_wiki_set = {}
@@ -1040,15 +1040,14 @@ def captcha_get():
         
         curs.execute(db_change('select data from other where name = "recaptcha_ver"'))
         rec_ver = curs.fetchall()
-        if  recaptcha and recaptcha[0][0] != '' and \
-            sec_re and sec_re[0][0] != '':
+        if recaptcha and recaptcha[0][0] != '' and sec_re and sec_re[0][0] != '':
             if not rec_ver or rec_ver[0][0] == '':
                 data += '' + \
                     '<script src="https://www.google.com/recaptcha/api.js" async defer></script>' + \
                     '<div class="g-recaptcha" data-sitekey="' + recaptcha[0][0] + '"></div>' + \
                     '<hr class="main_hr">' + \
                 ''
-            else:
+            elif rec_ver[0][0] == 'v3':
                 data += '' + \
                     '<script src="https://www.google.com/recaptcha/api.js?render=' + recaptcha[0][0] + '"></script>' + \
                     '<input type="hidden" id="g-recaptcha" name="g-recaptcha">' + \
@@ -1060,25 +1059,43 @@ def captcha_get():
                         '});' + \
                     '</script>' + \
                 ''
+            else:
+                data += '''
+                    <script src="https://js.hcaptcha.com/1/api.js" async defer></script>
+                    <div class="h-captcha" data-sitekey="''' + recaptcha[0][0] + '''"></div>
+                    <hr class="main_hr">
+                '''
 
     return data
 
 def captcha_post(re_data, num = 1):
     curs = conn.cursor()
 
-    if num == 1:
+    if num == 1 and ip_or_user() != 0:
         curs.execute(db_change('select data from other where name = "sec_re"'))
         sec_re = curs.fetchall()
-        if  sec_re and sec_re[0][0] != '' and \
-            ip_or_user() != 0 and captcha_get() != '':
-            data = requests.get(
-                'https://www.google.com/recaptcha/api/siteverify' + \
-                '?secret=' + sec_re[0][0] + '&response=' + re_data
-            )
-            if data.status_code == 200:
-                json_data = json.loads(data.text)
-                if json_data['success'] != True:
-                    return 1
+        
+        curs.execute(db_change('select data from other where name = "recaptcha_ver"'))
+        rec_ver = curs.fetchall()
+        if captcha_get() != '':
+            if not rec_ver or rec_ver[0][0] in ('', 'v3'):
+                data = requests.get(
+                    'https://www.google.com/recaptcha/api/siteverify' + \
+                    '?secret=' + sec_re[0][0] + '&response=' + re_data
+                )
+                if data.status_code == 200:
+                    json_data = json.loads(data.text)
+                    if json_data['success'] != True:
+                        return 1
+            else:
+                data = requests.get(
+                    'https://hcaptcha.com/siteverify' + \
+                    '?secret=' + sec_re[0][0] + '&response=' + re_data
+                )
+                if data.status_code == 200:
+                    json_data = json.loads(data.text)
+                    if json_data['success'] != True:
+                        return 1
 
         return 0
 

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.4.3 (stable2) (beta20) (dev36)",
+        "r_ver" : "v3.4.3 (stable2) (beta20) (dev37)",
         "c_ver" : "3500101",
         "s_ver" : "3500110"
     }