Browse Source

feat: 注册需要邀请码

SongZihuan 3 years ago
parent
commit
a438cf4056
6 changed files with 38 additions and 2 deletions
  1. 8 0
      app/app.py
  2. 16 0
      app/home.py
  3. 1 0
      configure/__init__.py
  4. 1 1
      gunicorn.conf.py
  5. 2 1
      templates/index.html
  6. 10 0
      templates/invite.html

+ 8 - 0
app/app.py

@@ -7,6 +7,7 @@ import logging.handlers
 import logging
 import os
 import sys
+import random
 
 
 class HEnglishFlask(Flask):
@@ -64,6 +65,13 @@ class HEnglishFlask(Flask):
         self.register_blueprint(test.test, url_prefix="/study")
         self.register_blueprint(word_list.word_list, url_prefix="/word")
 
+        self.invite_passwd: str = ""
+        self.new_invite_passwd()
+
     def update_config(self):
         self.config.update(configure.conf)
         self.logger.info("Update config")
+
+    def new_invite_passwd(self):
+        self.invite_passwd = "HEnglish-" + str(random.randint(100000, 999999))
+        return self.invite_passwd

+ 16 - 0
app/home.py

@@ -2,6 +2,8 @@ from flask import blueprints, url_for, request, redirect, render_template, flash
 from flask_login import login_user, current_user, login_required, logout_user
 from wtforms import PasswordField, BooleanField, SubmitField, SelectField
 from wtforms.validators import DataRequired, EqualTo, ValidationError
+
+import configure
 from app.user import load_user, create_user, check_template, get_template, have_user
 from app.tool import form_required, AuthForm
 
@@ -24,6 +26,7 @@ class RegisterForm(AuthForm):
     passwd_again = PasswordField("Passwd again",
                                  validators=[DataRequired(message="Must enter password again"),
                                              EqualTo("passwd", message="The password entered twice is different")])
+    invite_passwd = PasswordField("Invite passwd")
     submit = SubmitField("register")
 
     def __init__(self):
@@ -84,6 +87,11 @@ def register():
         abort(304)
 
     register_form: RegisterForm = g.form
+    if current_app.invite_passwd != register_form.invite_passwd.data:
+        flash("Register without invite")
+        return redirect(url_for("home.index"))
+
+    current_app.new_invite_passwd()
     flat, user = create_user(register_form.template.data, register_form.name.data, register_form.passwd.data)
     if user is not None:
         current_app.logger.debug(f"{register_form.name.data} with {register_form.template.data} register success")
@@ -101,3 +109,11 @@ def logout():
     logout_user()
     flash("User logout")
     return redirect(url_for("home.index"))
+
+
+@home.route('/invite/<string:url>')
+def invite(url: str):
+    if url != configure.conf["INVITE_URL"]:
+        return abort(404)
+    return render_template("invite.html", invite_passwd=current_app.invite_passwd)
+

+ 1 - 0
configure/__init__.py

@@ -15,6 +15,7 @@ conf = {
     "SERVER_NAME": None,
     "MAX_CONTENT_LENGTH": 5 * 1024 * 1024,
     "LOG_FILE_NAME_PID": False,
+    "INVITE_URL": "12345678",
 }
 
 

+ 1 - 1
gunicorn.conf.py

@@ -12,7 +12,7 @@ workers = multiprocessing.cpu_count() * 2 + 1  # 进程数
 threads = 2  # 指定每个进程开启的线程数
 
 henglish_path = os.path.join(os.environ['HOME'], "henglish")
-os.makedirs(henglish_path, exist_ok=True, mode=0o775)
+os.makedirs(os.path.join(henglish_path, "log"), exist_ok=True, mode=0o775)
 
 # 设置访问日志和错误信息日志路径
 log_format = ("%(levelname)s:%(name)s:%(asctime)s "

+ 2 - 1
templates/index.html

@@ -31,6 +31,7 @@
                             {{ macro.render_field(register_form.template) }}
                             {{ macro.render_field(register_form.passwd) }}
                             {{ macro.render_field(register_form.passwd_again) }}
+                            {{ macro.render_field(register_form.invite_passwd) }}
 
                             <div class="text-left">
                                 {{ register_form.submit(class='btn btn-info mr-2') }}
@@ -50,4 +51,4 @@
     <script>
         $('#auth .active a').tab('show');  // 显示第一个 tab
     </script>
-{% endblock %}
+{% endblock %}

+ 10 - 0
templates/invite.html

@@ -0,0 +1,10 @@
+{% extends "base.html" %}
+
+{% block body %}
+    <article class="container mt-2 mb-2">
+        <section class="mt-2 text-center">
+            <p class="h4"> Invite passwd </p>
+            <p> {{ invite_passwd }} </p>
+        </section>
+    </article>
+{% endblock %}