This commit is contained in:
Андрей Дувакин 2024-11-01 15:09:49 +05:00
parent 15cf93cceb
commit 561d45b991
8 changed files with 115 additions and 35 deletions

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
/egg.txt
/venv/
.idea/
/.idea
/static
static/

View File

@ -7,6 +7,7 @@ SqlAlchemyBase = dec.declarative_base()
__factory = None __factory = None
def global_init(db_file): def global_init(db_file):
global __factory global __factory
@ -25,6 +26,7 @@ def global_init(db_file):
SqlAlchemyBase.metadata.create_all(engine) SqlAlchemyBase.metadata.create_all(engine)
def create_session() -> Session: def create_session() -> Session:
global __factory global __factory
return __factory() return __factory()

View File

@ -10,4 +10,4 @@ class Roles(SqlAlchemyBase, UserMixin):
id = sqlalchemy.Column(sqlalchemy.Integer, id = sqlalchemy.Column(sqlalchemy.Integer,
primary_key=True, autoincrement=True) primary_key=True, autoincrement=True)
name = sqlalchemy.Column(sqlalchemy.String, nullable=False) name = sqlalchemy.Column(sqlalchemy.String, nullable=False)
rights = sqlalchemy.Column(sqlalchemy.Integer) rights = sqlalchemy.Column(sqlalchemy.Integer)

6
forms/egg.py Normal file
View File

@ -0,0 +1,6 @@
from flask_wtf import FlaskForm
from wtforms import BooleanField
class EggForm(FlaskForm):
egg = BooleanField('Пасхалка')

25
main.py
View File

@ -13,6 +13,7 @@ from sqlalchemy import or_
from json import loads from json import loads
from waitress import serve from waitress import serve
from forms.egg import EggForm
from functions import check_password, mail, init_db_default, get_projects_data, get_user_data, save_project_logo, \ from functions import check_password, mail, init_db_default, get_projects_data, get_user_data, save_project_logo, \
overdue_quest_project, save_proof_quest, find_files_answer, file_tree, delete_project_data, delete_quest_data, \ overdue_quest_project, save_proof_quest, find_files_answer, file_tree, delete_project_data, delete_quest_data, \
copy_template, save_admin_data copy_template, save_admin_data
@ -110,7 +111,14 @@ def admin():
roles, users = data_session.query(Roles).all(), \ roles, users = data_session.query(Roles).all(), \
data_session.query(User).filter(User.id != current_user.id).all() data_session.query(User).filter(User.id != current_user.id).all()
form = EncryptForm() form = EncryptForm()
egg_form = EggForm()
if request.method == 'POST': if request.method == 'POST':
if egg_form.egg.data:
with open('egg.txt', 'w', encoding='utf-8') as file_egg:
file_egg.write('1')
else:
with open('egg.txt', 'w', encoding='utf-8') as file_egg:
file_egg.write('2')
data_form = request.form.to_dict() data_form = request.form.to_dict()
del data_form['csrf_token'], data_form['submit'] del data_form['csrf_token'], data_form['submit']
data_form = list(map(lambda x: (x[0], x[1]), data_form.items())) data_form = list(map(lambda x: (x[0], x[1]), data_form.items()))
@ -128,7 +136,10 @@ def admin():
user.banned = 0 user.banned = 0
user.activated = 1 user.activated = 1
data_session.commit() data_session.commit()
return render_template('admin.html', title='Панель админа', roles=roles, users=users, form=form) with open('egg.txt', 'r', encoding='utf-8') as file_egg:
egg_form.egg.data = True if int(file_egg.read()) == 1 else False
return render_template('admin.html', title='Панель админа', roles=roles, users=users,
form=form, egg_form=egg_form)
abort(404) abort(404)
@ -771,17 +782,21 @@ def logout():
@app.route('/register', methods=['GET', 'POST']) @app.route('/register', methods=['GET', 'POST'])
def register(): def register():
if not current_user.is_authenticated: if not current_user.is_authenticated:
with open('egg.txt', 'r', encoding='utf-8') as file_egg:
egg = int(file_egg.read())
form = RegisterForm() form = RegisterForm()
if form.validate_on_submit(): if form.validate_on_submit():
data_session = db_session.create_session() data_session = db_session.create_session()
if data_session.query(User).filter(User.login == form.login.data).first(): if data_session.query(User).filter(User.login == form.login.data).first():
return render_template('register.html', form=form, message="Такой пользователь уже есть", return render_template('register.html', form=form, message="Такой пользователь уже есть",
title='Регистрация') title='Регистрация', egg=0)
if data_session.query(User).filter(User.email == form.email.data).first(): if data_session.query(User).filter(User.email == form.email.data).first():
return render_template('register.html', form=form, message="Такая почта уже есть", title='Регистрация') return render_template('register.html', form=form, message="Такая почта уже есть", egg=0,
title='Регистрация')
status_password = check_password(form.password.data) status_password = check_password(form.password.data)
if status_password != 'OK': if status_password != 'OK':
return render_template('register.html', form=form, message=status_password, title='Регистрация') return render_template('register.html', form=form, message=status_password, egg=0,
title='Регистрация')
user = User( user = User(
email=form.email.data, email=form.email.data,
name=form.name.data, name=form.name.data,
@ -800,7 +815,7 @@ def register():
'Подтверждение регистрации') 'Подтверждение регистрации')
logging.info(f'{form.login.data} was registered') logging.info(f'{form.login.data} was registered')
return redirect('/login?message=Мы выслали ссылку для подтверждения почты') return redirect('/login?message=Мы выслали ссылку для подтверждения почты')
return render_template('register.html', form=form, message='', title='Регистрация') return render_template('register.html', form=form, message='', title='Регистрация', egg=egg)
else: else:
return redirect('/projects') return redirect('/projects')

View File

@ -1,6 +1,9 @@
#navbar { #navbar {
display: none; display: none;
} }
#btn_cooc {
display: none
}
.register_page { .register_page {
margin-top: -1.1vw; margin-top: -1.1vw;
display: flex; display: flex;

View File

@ -3,37 +3,41 @@
<div class="admin_page"> <div class="admin_page">
<h2 class="admine_title">Изменение данных пользователей</h2> <h2 class="admine_title">Изменение данных пользователей</h2>
<form action="" method="post" class="edit_user_form" enctype="multipart/form-data"> <form action="" method="post" class="edit_user_form" enctype="multipart/form-data">
{{ form.hidden_tag() }} {{ form.hidden_tag() }}
<div class="admin_block"> <div class="admin_block">
<div class="users_block"> <div class="users_block">
{% for user in users %} {% for user in users %}
<div class="user"> <div class="user">
<a class="link_to_user" href="/admin/user/{{ user.login }}"> <a class="link_to_user" href="/admin/user/{{ user.login }}">
<img class="user_logo" src="{{user.photo}}"> <img class="user_logo" src="{{user.photo}}">
<p class="user_names">{{user.name}}</p> <p class="user_names">{{user.name}}</p>
</a> </a>
<select name="role_{{ user.id }}" class="form-select role_div" aria-label="Default select example"> <select name="role_{{ user.id }}" class="form-select role_div" aria-label="Default select example">
{% for role in roles %} {% for role in roles %}
<option class="role" value="{{ loop.index }}" {% if user.role == loop.index %}selected{% <option class="role" value="{{ loop.index }}" {% if user.role== loop.index %}selected{%
endif %}>{{ roles[loop.index0].name }} endif %}>{{ roles[loop.index0].name }}
</option> </option>
{% endfor %} {% endfor %}
</select> </select>
{% if user.role != 1 %} {% if user.role != 1 %}
<div class="user_active"> <div class="user_active">
<label class="active_label">Активирован</label> <label class="active_label">Активирован</label>
<input class="choose_active" name="active_{{user.id}}" type="checkbox" value="y" {% if user.activated == 1 %}checked="yes"{% endif %}> <input class="choose_active" name="active_{{user.id}}" type="checkbox" value="y" {% if
user.activated== 1 %}checked="yes" {% endif %}>
</div>
<div class="user_banned">
<label class="banned_label">Бан</label>
<input class="choose_banned" name="banned_{{user.id}}" type="checkbox" value="y" {% if
user.banned== 1 %}checked="yes" {% endif %}>
</div>
{% endif %}
</div> </div>
<div class="user_banned"> {% endfor %}
<label class="banned_label">Бан</label>
<input class="choose_banned" name="banned_{{user.id}}" type="checkbox" value="y" {% if user.banned == 1 %}checked="yes"{% endif %}>
</div>
{% endif %}
</div> </div>
{% endfor %}
</div> </div>
</div> <label>Пасхалка</label>
{{ form.submit(type="submit", class="save_button") }} {{egg_form.egg}}
{{ form.submit(type="submit", class="save_button") }}
</form> </form>
</div> </div>
{% endblock %} {% endblock %}

View File

@ -1,6 +1,43 @@
<link rel="stylesheet" href="../static/css/register.css"/> <link rel="stylesheet" href="../static/css/register.css"/>
{% extends "base.html" %} {% block content %} {% extends "base.html" %} {% block content %}
<div class="register_page"> <div class="register_page">
{% if egg == 1 %}
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" id="btn_cooc" data-bs-toggle="modal" data-bs-target="#staticBackdrop">
Launch static backdrop modal
</button>
<!-- Modal -->
<div class="modal fade" id="staticBackdrop" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1"
aria-labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title fs-5" id="staticBackdropLabel">Да, мы собираем сраные куки. Вам не
похуй?</h3>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bs-toggle="modal"
data-bs-target="#staticBackdrop2">Ну похуй
</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="staticBackdrop2" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1"
aria-labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title fs-5" id="staticBackdropLabel2">Ну вот и не выебывайся</h3>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">Заткни ебальник</button>
</div>
</div>
</div>
</div>
{% endif %}
<div class="register"> <div class="register">
<h1 class="header_title">Регистрация</h1> <h1 class="header_title">Регистрация</h1>
<div> <div>
@ -51,4 +88,11 @@
</div> </div>
</div> </div>
</div> </div>
{% if egg == 1 %}
<script type="text/javascript">
window.onload = function(){
document.getElementById('btn_cooc').click();
}
</script>
{% endif %}
{% endblock %} {% endblock %}