from flask import *
from flask_login import LoginManager, logout_user, login_required, current_user, login_user
from forms import *
import json
import datetime
import dateutil
import os
from data import db_session
from data import __all_models
from data.users import User
from data.jokes import Joke
from data.music import Music
from data.score import Score
from data.servers import Server
from data.extra_links import Link
from svgs import link_images, image_choices
from pathlib import Path
import subprocess
from flask import Flask, make_response, request, abort
from io import StringIO, BytesIO
import subprocess, os.path
import re
# THIS CODE IS UNDER GNU GPL V3 LICENCE
# LIBREJOKES
# JOIN US NOW
# AND SHARE THE
# SOFTWARE
from flask_httpauth import HTTPBasicAuth
from languages import translations
# Librejokes - enter the DIR path
DIR = '/home/USER/ultra_trash_storage'
db_session.global_init("db/blogs.db")
defaultimg = open("static/img/default.png", 'rb').read()
storagepath = Path(__file__[:__file__.rfind('/')] + '/storage')
print(storagepath)
def days_hours_minutes(td):
return td.days, td.seconds//3600, (td.seconds//60)%60
app = Flask(__name__)
app.config['PERMANENT_SESSION_LIFETIME'] = datetime.timedelta(
days=365
)
GOYDA_COUNT = 10
app.config['WTF_CSRF_ENABLED'] = False
app.config['SECRET_KEY'] = "enter_libre_key_there_hacker"
app.config['UPLOAD_FOLDER'] = "static/img/"
'''внимание, сейчас эпично'''
JOKES_ON_PAGE = 10
login_manager = LoginManager()
login_manager.init_app(app)
@login_manager.user_loader
def load_user(user_id):
db_sess = db_session.create_session()
return db_sess.query(User).get(user_id)
def load_user_by_name(name):
db_sess = db_session.create_session()
return db_sess.query(User).get(name)
@app.route('/logout')
@login_required
def logout():
logout_user()
return redirect("/")
n = 0
@app.route('/change_language/<string:lang>')
def change_language(lang):
if lang in ['ru', 'en', 'sp']:
i = ['ru', 'en', 'sp'].index(lang)
page = request.args.get('page', default='/')
res = make_response(redirect(page))
res.set_cookie('language', lang)
return res
@app.route('/change_cs')
def change_cs():
cs = request.cookies.get('design', 'main.css')
if cs == 'main.css':
cs = 'main3.css'
elif cs == 'main3.css':
cs = 'main.css'
res = make_response(redirect('/'))
res.set_cookie('design', cs)
return res
@app.route("/fluppyfuck")
@app.route("/ff")
def ffuck():
return render_template("ff_main.html")
@app.route("/main.data")
def maindata():
return send_file("templates/main.data", as_attachment=True)
@app.route("/main.wasm")
def mainwasm():
return send_file("templates/main.wasm", mimetype='application/wasm')
@app.route('/main.js')
def mainjs():
return app.response_class(
response=open("templates/main.js").read(),
status=200,
mimetype='application/javascript'
)
@app.route('/')
def libre_the_jiss():
language = request.cookies.get("language", 'ru')
cs = request.cookies.get("design", "style.css")
cs = 'style.css'
i = ['ru', 'en', 'sp'].index(language)
res = make_response(render_template('lj.html', translations=translations, lang=i, cs=cs))
if not language:
res.set_cookie("language", 'ru')
if not cs:
res.set_cookie("design", "main.css")
db_sess = db_session.create_session()
return res
@app.route('/librememes')
def librememes():
language = request.cookies.get("language", 'ru')
cs = request.cookies.get("design", "style.css")
cs = 'style.css'
i = ['ru', 'en', 'sp'].index(language)
res = make_response(render_template('ma.html', translations=translations, lang=i, cs=cs))
if not language:
res.set_cookie("language", 'ru')
if not cs:
res.set_cookie("design", "main.css")
db_sess = db_session.create_session()
return res
@app.route('/joinusnow')
def join_us_now():
language = request.cookies.get("language", 'ru')
cs = request.cookies.get("design", "style.css")
cs = 'style.css'
i = ['ru', 'en', 'sp'].index(language)
res = make_response(render_template('jsn.html', translations=translations, lang=i, cs=cs))
if not language:
res.set_cookie("language", 'ru')
if not cs:
res.set_cookie("design", "main.css")
db_sess = db_session.create_session()
return res
@app.route('/old')
def draw_():
language = request.cookies.get("language", 'ru')
cs = request.cookies.get("design", "main.css")
i = ['ru', 'en', 'sp'].index(language)
res = make_response(render_template('main.html', translations=translations, lang=i, cs=cs))
if not language:
res.set_cookie("language", 'ru')
if not cs:
res.set_cookie("design", "main.css")
db_sess = db_session.create_session()
return res
@app.route('/jokes/add_joke', methods=['GET', 'POST'])
@login_required
def add_joke():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
ilp = ['ru', 'en', 'sp'].index(language)
form = AddJokeForm()
if form.validate_on_submit():
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.id == current_user.id).first()
user.jokes_count = user.jokes_count + 1
joke = Joke(
about = form.about.data,
text = form.text.data,
user_id = user.id,
user_name = current_user.name
)
db_sess.add(joke)
db_sess.commit()
return redirect(f'/jokes/add_joke/photo_joke/{joke.id}')
return render_template('add_joke.html', form=form, translations=translations, lang=ilp, cs=cs)
@app.route('/jokes/add_joke/photo_joke/<int:id>', methods=['GET', 'POST'])
@login_required
def upload_photo_joke(id):
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
ilp = ['ru', 'en', 'sp'].index(language)
imgform = ImgUploadForm()
if imgform.validate_on_submit():
db_sess = db_session.create_session()
joke = db_sess.query(Joke).filter(Joke.id == id).first()
if current_user.id != joke.user_id:
print("попался голубчик")
return redirect('/jokes')
joke.image = imgform.image.data.stream.read()
db_sess.commit()
return redirect('/jokes') # {{imgform.submit(type="submit", class="btn btn-primary")}}
return render_template('upload_photo.html', imgform=imgform, exception='/jokes', translations=translations, lang=ilp, cs=cs)
@app.route('/upload_photo', methods=['GET', 'POST'])
def upload_photo():
cs = request.cookies.get('design', 'main.css')
imgform = ImgUploadForm()
if imgform.validate_on_submit():
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.id == current_user.id).first()
try:
user.image = imgform.image.data.stream.read()
except:
pass
db_sess.commit()
return redirect('/') # {{imgform.submit(type="submit", class="btn btn-primary")}}
return render_template('upload_photo.html', imgform=imgform, exception='/', cs=cs)
USERS_ON_PAGE = 50 # размах!
@app.route('/our_dear_users')
def draw():
cs = request.cookies.get('design', 'main.css')
#global n
#user = User(name = "User" + str(n), email = "bobara")
#db_sess.add(user)
#db_sess.commit()
#s = []
#for user in db_sess.query(User).all():
# s.append([user.name, user.id])
page = request.args.get('page', default=0, type=int)
db_sess = db_session.create_session()
user = db_sess.query(User).all()
users_count = db_sess.query(User).count()
start = users_count - page * USERS_ON_PAGE
end = users_count - (page + 1) * USERS_ON_PAGE
if end < 0:
end = 0
users = db_sess.query(User).slice(end,start)
return render_template('doska_pocheta.html', blocks=users[::-1], page=page, admins='', page_count = users_count // USERS_ON_PAGE + 1, cs=cs)
@app.route("/show_image/<int:id>")
def show_image(id):
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.id == id).first()
if user.image == None:
ret = make_response(defaultimg)
else:
ret = make_response(user.image)
ret.headers.set('Content-Type', 'image/png')
return ret
@app.route('/show_svgs/<int:index>')
def show_svgs(index):
ret = make_response(link_images[index])
ret.headers.set('Content-Type', 'image/svg+xml')
return ret
@app.route("/play_music/<int:id>")
def play_music(id):
db_sess = db_session.create_session()
music = db_sess.query(Music).filter(Music.id == id).first()
ret = make_response(music.music)
ret.headers.set('Content-type', 'audio/mpeg')
return ret
@app.route("/show_image/jokes/<int:id>")
def show_joke_image(id):
db_sess = db_session.create_session()
user = db_sess.query(Joke).filter(Joke.id == id).first()
if user.image == None:
ret = make_response(defaultimg)
else:
ret = make_response(user.image)
ret.headers.set('Content-Type', 'image/png')
return ret
@app.route('/jokes')
def draw_jokes():
cs = request.cookies.get('design', 'main.css')
page = request.args.get('page', default=0, type=int)
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
db_sess = db_session.create_session()
jokes = db_sess.query(Joke).all()
jokes_count = db_sess.query(Joke).count()
start = jokes_count - page * JOKES_ON_PAGE
end = jokes_count - (page + 1) * JOKES_ON_PAGE
if end < 0:
end = 0
jokes = db_sess.query(Joke).slice(end,start)
return render_template('jokes.html', jokes=jokes[::-1], page=page, page_count=jokes_count // JOKES_ON_PAGE + 1, by_id='', translations=translations, lang=i, cs=cs)
@app.route('/jokes/<string:name>')
def draw_personal_jokes(name):
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
page = request.args.get('page', default=0, type=int)
db_sess = db_session.create_session()
jokes = db_sess.query(Joke).filter(Joke.user_name == name).all()
jokes_count = db_sess.query(Joke).filter(Joke.user_name == name).count()
start = jokes_count - page * JOKES_ON_PAGE
end = jokes_count - (page + 1) * JOKES_ON_PAGE
if end > jokes_count:
end = jokes_count
jokes = db_sess.query(Joke).filter(Joke.user_name == name).slice(end, start)
return render_template('jokes.html', jokes=jokes[::-1], page=page, page_count=jokes_count // JOKES_ON_PAGE + 1, by_id=f"/{id}", one_joke=name, translations=translations, lang=i, cs=cs)
@app.route('/jokes/<int:id>')
def draw_joke(id):
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
page = request.args.get('page', default=0, type=int)
db_sess = db_session.create_session()
jokes = db_sess.query(Joke).filter(Joke.id == id).all()
jokes_count = db_sess.query(Joke).filter(Joke.id == id).count()
start = jokes_count - page * JOKES_ON_PAGE
end = jokes_count - (page + 1) * JOKES_ON_PAGE
if end > jokes_count:
end = jokes_count
jokes = db_sess.query(Joke).filter(Joke.id == id).slice(end, start)
return render_template('joke_page.html', jokes=jokes[::-1], page=page, page_count=jokes_count // JOKES_ON_PAGE + 1, by_id=f"/{id}", one_joke=id, translations=translations, lang=i, cs=cs)
@app.route('/our_dear_users/<int:id>')
@app.route('/user/<int:id>')
def draw_user(id=-1):
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
user = load_user(id)
db_sess = db_session.create_session()
extra_links = db_sess.query(Link).filter(Link.user_id == id).all()
now = datetime.datetime.now()
d, h, m = days_hours_minutes(now - user.created_date)
return render_template('user_page.html', user=user, dated=d, dateh=h, datem=m, extra_links=extra_links, link_images=link_images, translations=translations, lang=i, cs=cs)
@app.route('/our_dear_users/<string:name>')
@app.route('/user/<string:name>')
def draw_user1(name='boyaroslav'):
db_sess = db_session.create_session()
usid = db_sess.query(User).filter(User.name == name).first()
return draw_user(usid.id)
@app.route('/our_dear_users/our_dear_admins')
def draw_admins():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
page = request.args.get('page', default=0, type=int)
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.admin == 1).all()
users_count = db_sess.query(User).filter(User.admin == 1).count()
start = users_count - page * USERS_ON_PAGE
end = users_count - (page + 1) * USERS_ON_PAGE
if end < 0:
end = 0
users = db_sess.query(User).filter(User.admin == 1).slice(end,start)
return render_template('doska_pocheta.html', blocks=users[::-1], page=page, admins='/our_dear_admins', page_count = users_count // USERS_ON_PAGE + 1, translations=translations, lang=i, cs=cs)
@app.route('/register', methods=['GET', 'POST'])
def reqister():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
form = RegisterForm()
imgform = ImgUploadForm()
if form.validate_on_submit():
if form.password.data != form.password_again.data:
return render_template('register.html', title='Регистрация',
form=form,
message="Пароли не совпадают", translations=translations, lang=i)
db_sess = db_session.create_session()
if db_sess.query(User).filter(User.email == form.email.data).first():
return render_template('register.html', title='Регистрация',
form=form,
message="Такой пользователь уже есть", translations=translations, lang=i, cs=cs)
user = User(
name=form.name.data,
email=form.email.data,
about=form.about.data,
telegram_=form.telegram.data,
git_=form.github.data,
social_=form.social.data
)
user.set_password(form.password.data)
db_sess.add(user)
db_sess.commit()
login_user(user, False)
return redirect('/upload_photo')
return render_template('register.html', title='Регистрация', form=form, translations=translations, lang=i, cs=cs)
@app.route('/login', methods=['GET', 'POST'])
def login():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
form = LoginForm()
if form.validate_on_submit():
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.email == form.email.data).first()
if user and user.check_password(form.password.data):
login_user(user, remember=form.remember_me.data)
return redirect("/")
return render_template('login.html',
message="Неправильный логин или пароль",
form=form, translations=translations, lang=i, cs=cs)
return render_template('login.html', title='Авторизация', form=form, translations=translations, lang=i, cs=cs)
@app.route('/music')
def draw_music():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
page = request.args.get('page', default=0, type=int)
db_sess = db_session.create_session()
music = db_sess.query(Music).all()
music_count = db_sess.query(Music).count() # не смущайтесь, это надо
start = music_count - page * JOKES_ON_PAGE
end = music_count - (page + 1) * JOKES_ON_PAGE
if end < 0:
end = 0
jokes = db_sess.query(Music).slice(end,start)
return render_template('music.html', music=music[::-1], page=page, page_count=music_count // JOKES_ON_PAGE + 1, by_id='', translations=translations, lang=i, cs=cs)
@app.route('/music/<string:name>')
def draw_music_byname(name):
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
page = request.args.get('page', default=0, type=int)
db_sess = db_session.create_session()
music = db_sess.query(Music).filter(Music.user_name == name).all()
music_count = db_sess.query(Music).filter(Music.user_name == name).count() # не смущайтесь, это надо
start = music_count - page * JOKES_ON_PAGE
end = music_count - (page + 1) * JOKES_ON_PAGE
if end < 0:
end = 0
jokes = db_sess.query(Music).slice(end,start)
return render_template('music.html', music=music[::-1], page=page, page_count=music_count // JOKES_ON_PAGE + 1, by_id='f/{id}', translations=translations, lang=i, cs=cs)
@app.route('/music/<int:id>')
def draw_music_byid(id):
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
page = request.args.get('page', default=0, type=int)
db_sess = db_session.create_session()
music = db_sess.query(Music).filter(Music.id == id).all()
music_count = db_sess.query(Music).filter(Music.id == id).count() # не смущайтесь, это надо
start = music_count - page * JOKES_ON_PAGE
end = music_count - (page + 1) * JOKES_ON_PAGE
if end < 0:
end = 0
jokes = db_sess.query(Music).slice(end,start)
return render_template('music_page.html', music=music[::-1], page=page, page_count=music_count // JOKES_ON_PAGE + 1, by_id='f/{id}', translations=translations, lang=i, cs=cs)
@app.route('/music/add_music', methods=['GET', 'POST'])
@login_required
def add_music():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
form = AddMusicContext()
if form.validate_on_submit():
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.id == current_user.id).first()
user.music_count = user.music_count + 1
music = Music(
name = form.name.data,
author = form.author.data,
user_id = user.id,
user_name = current_user.name
)
db_sess.add(music)
db_sess.commit()
return redirect(f'/music/add_music/add_file/{music.id}')
return render_template('add_music.html', form=form, translations=translations, lang=i, cs=cs)
@app.route('/music/add_music/add_file/<int:id>', methods=['GET', 'POST'])
@login_required
def add_music_file(id):
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
musicform = MusicUploadForm()
if musicform.validate_on_submit():
db_sess = db_session.create_session()
music = db_sess.query(Music).filter(Music.id == id).first()
if current_user.id != music.user_id:
print("попался голубчик")
return redirect('/music')
music.music = musicform.music.data.stream.read()
db_sess.commit()
return redirect('/music') # {{imgform.submit(type="submit", class="btn btn-primary")}}
return render_template('upload_music.html', musicform=musicform, translations=translations, lang=i, cs=cs)
@app.route('/jokes/delete/<int:id>')
@login_required
def delete_joke(id):
if current_user.admin == 1:
db_sess = db_session.create_session()
joke = db_sess.query(Joke).filter(Joke.id == id)
user = db_sess.query(User).filter(User.id == joke.first().user_id).first()
user.jokes_count = user.jokes_count - 1
joke.delete()
db_sess.commit()
return redirect('/jokes')
@app.route('/music/delete/<int:id>')
@login_required
def delete_music(id):
if current_user.admin == 1:
db_sess = db_session.create_session()
music = db_sess.query(Music).filter(Music.id == id)
user = db_sess.query(User).filter(User.id == music.first().user_id).first()
user.music_count = user.music_count - 1
music.delete()
db_sess.commit()
return redirect('/music')
@app.route('/servers/delete/<int:id>')
@login_required
def delete_server(id):
if current_user.admin == 1:
db_sess = db_session.create_session()
server = db_sess.query(Server).filter(Server.id == id)
user = db_sess.query(User).filter(User.id == server.first().user_id).first()
user.servers_count = user.servers_count - 1
server.delete()
db_sess.commit()
return redirect('/servers')
@app.route('/administrate/can_joke/<int:id>')
@login_required
def adm_joke(id):
if current_user.admin == 0:
redirect('/')
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.id == id).first()
user.can_joke = not user.can_joke
db_sess.commit()
return redirect(f'/our_dear_users/{id}')
@app.route('/administrate/can_music/<int:id>')
@login_required
def adm_music(id):
if current_user.admin == 0:
redirect('/')
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.id == id).first()
user.can_music = not user.can_music
db_sess.commit()
return redirect(f'/our_dear_users/{id}')
@app.route('/administrate/can_server/<int:id>')
@login_required
def adm_server(id):
if current_user.admin == 0:
redirect('/')
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.id == id).first()
user.can_server = not user.can_server
db_sess.commit()
return redirect(f'/our_dear_users/{id}')
@app.route('/administrate/make_admin/<int:id>')
@login_required
def adm_make_admin(id):
if current_user.admin == 0:
redirect('/')
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.id == id).first()
user.admin = 1
db_sess.commit()
return redirect(f'/our_dear_users/{id}')
@app.route('/administrate/delete_account._./<int:id>')
@login_required
def adm_delete_account(id):
if current_user.admin == 1:
db_sess = db_session.create_session()
print('ГОЙДА',db_sess.query(User).filter(User.id == id).first().admin)
if db_sess.query(User).filter(User.id == id).first().admin == 0:
db_sess.query(Joke).filter(Joke.user_id == id).delete()
db_sess.query(Music).filter(Music.user_id == id).delete()
db_sess.query(Server).filter(Server.user_id == id).delete()
db_sess.query(User).filter(User.id == id).delete()
db_sess.query(Link).filter(Link.user_id == id).delete()
db_sess.commit()
return redirect('/our_dear_users')
return redirect(f'/our_dear_users/{id}')
elif current_user.id == id:
db_sess = db_session.create_session()
if db_sess.query(User).filter(User.id == id).first().admin == 0:
logout_user()
db_sess.query(Joke).filter(Joke.user_id == id).delete()
db_sess.query(Music).filter(Music.user_id == id).delete()
db_sess.query(Server).filter(Server.user_id == id).delete()
db_sess.query(User).filter(User.id == id).delete()
db_sess.query(Link).filter(Link.user_id == id).delete()
db_sess.commit()
return redirect('/')
return redirect(f'/our_dear_users/{id}')
@app.route('/servers')
def draw_servers():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
page = request.args.get('page', default=0, type=int)
db_sess = db_session.create_session()
servers = db_sess.query(Server).all()
servers_count = db_sess.query(Server).count()
start = servers_count - page * JOKES_ON_PAGE
end = servers_count - (page + 1) * JOKES_ON_PAGE
if end < 0:
end = 0
servers = db_sess.query(Server).slice(end,start)
return render_template('servers.html', servers=servers[::-1], page=page, page_count=servers_count // JOKES_ON_PAGE + 1, by_id='', translations=translations, lang=i, cs=cs)
@app.route('/servers/<string:name>')
def draw_servers_byname(name):
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
page = request.args.get('page', default=0, type=int)
db_sess = db_session.create_session()
servers = db_sess.query(Server).filter(Server.user_name == name).all()
servers_count = db_sess.query(Server).filter(Server.user_name == name).count() # не смущайтесь, это надо
start = servers_count - page * JOKES_ON_PAGE
end = servers_count - (page + 1) * JOKES_ON_PAGE
if end < 0:
end = 0
jokes = db_sess.query(Music).slice(end,start)
return render_template('servers.html', servers=servers[::-1], page=page, page_count=servers_count // JOKES_ON_PAGE + 1, by_id='f/{id}', translations=translations, lang=i, cs=cs)
@app.route('/servers/<int:id>')
def draw_servers_byid(id):
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
page = request.args.get('page', default=0, type=int)
db_sess = db_session.create_session()
servers = db_sess.query(Server).filter(Server.id == id).all()
servers_count = db_sess.query(Server).filter(Server.id == id).count() # не смущайтесь, это надо
start = servers_count - page * JOKES_ON_PAGE
end = servers_count - (page + 1) * JOKES_ON_PAGE
if end < 0:
end = 0
jokes = db_sess.query(Music).slice(end,start)
return render_template('servers.html', servers=servers[::-1], page=page, page_count=servers_count // JOKES_ON_PAGE + 1, by_id='f/{id}', translations=translations, lang=i, cs=cs)
@app.route('/servers/add_server', methods=['GET', 'POST'])
@login_required
def add_server():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
form = AddServerForm()
if form.validate_on_submit():
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.id == current_user.id).first()
user.servers_count = user.servers_count + 1
server = Server(
game = form.game.data,
protocol = form.protocol.data,
title = form.title.data,
ip = form.ip.data,
user_id = user.id,
user_name = current_user.name
)
db_sess.add(server)
db_sess.commit()
return redirect('/servers')
return render_template('add_server.html', form=form, translations=translations, lang=i,cs=cs)
@app.route('/goyda_lent')
def goyda():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
posts = []
db_sess = db_session.create_session()
# jokes
jokes_count = db_sess.query(Joke).count()
posts += db_sess.query(Joke).order_by(-Joke.id).slice(0, 10)
# music
music_count = db_sess.query(Music).count()
posts += db_sess.query(Music).order_by(-Music.id).slice(0, 10)
# servers
servers_count = db_sess.query(Server).count()
posts += db_sess.query(Server).order_by(-Server.id).slice(0, 10)
posts = sorted(posts, key=lambda j: j.created_date)
return render_template('goyda.html', posts=posts[::-1], translations=translations, lang=i, cs=cs)
@app.route('/change_about', methods=['GET', 'POST'])
@login_required
def change_about():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
form = ChangeAboutForm()
if form.validate_on_submit():
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.id == current_user.id).first()
user.about = form.about.data
db_sess.commit()
return redirect(f'/our_dear_users/{current_user.id}')
return render_template('change_about.html', form=form, exception=f'/our_dear_users/{current_user.id}', translations=translations, lang=i, cs=cs)
@app.route('/add_link', methods=['GET', 'POST'])
@login_required
def add_extra_link():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
form = AddLinkForm()
if form.validate_on_submit():
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.id == current_user.id).first()
link = Link(
link = form.link.data,
image = form.images.data,
user_id = user.id
)
db_sess.add(link)
db_sess.commit()
return redirect(f'/our_dear_users/{current_user.id}', translations=translations, lang=i, cs=cs)
return render_template('add_link.html', form=form, translations=translations, lang=i, cs=cs)
def get_author(name):
ans = open(f"storage/{name}/bpauthor").read()
return ans
def get_describtion(name):
return open(f"storage/{name}/bpdescribe").read()
@app.route('/gitreps')
def draw_reps():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
path = request.args.get('path', default='')
r = get_reps(os.path.join(DIR, 'storage'))
return render_template('gitreps.html', reps=r, translations=translations, lang=i, path=path, ptype='d', cs=cs)
def get_reps(name):
for i in Path(name).iterdir():
yield [get_author(i.name), i.name, get_describtion(i.name)]
def gen_get_reps(name):
a = []
for i in get_reps(name):
a.append(i)
return a
gitauth = HTTPBasicAuth()
# Librejokes - we don't give a fuck whats going on there. We wrote that many years ago...
git_allowed = {
'user': 'password'
}
@gitauth.verify_password
def verify_password(username, password):
if username and password:
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.name == username).first()
if user == None: return None
if user.check_password(password):
return 1
return None
@app.route('/gitreps/<string:name>/info/refs')
@gitauth.login_required
def inforefs(name):
service = request.args.get('service')
if service[:4] != 'git-':
abort(500)
print(os.path.join(DIR, 'storage', name))
p = subprocess.Popen([service, '--stateless-rpc', '--advertise-refs', os.path.join('storage', name)], stdout=subprocess.PIPE)
packet = '# service=%s\n' % service
length = len(packet) + 4
_hex = '0123456789abcdef'
prefix = ''
prefix += _hex[length >> 12 & 0xf]
prefix += _hex[length >> 8 & 0xf]
prefix += _hex[length >> 4 & 0xf]
prefix += _hex[length & 0xf]
data = prefix + packet + '0000'
data += p.stdout.read().decode()
res = make_response(data)
res.headers['Expires'] = 'Fri, 01 Jan 1980 00:00:00 GMT'
res.headers['Pragma'] = 'no-cache'
res.headers['Cache-Control'] = 'no-cache, max-age=0, must-revalidate'
res.headers['Content-Type'] = 'application/x-%s-advertisement' % service
p.wait()
return res
@app.route('/gitreps/create', methods=['GET', 'POST'])
@login_required
def git_create_repo():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
ilp = ['ru', 'en', 'sp'].index(language)
form = AddJokeForm()
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.id == current_user.id).first()
if form.validate_on_submit():
about = form.about.data,
text = form.text.data,
if about[0] not in os.listdir('storage'):
ans = os.popen(f'bash init_repo.bash {about[0]} {user.name} "{text[0]}"').read()
return redirect(f'/gitreps')
return render_template('git_create_repo.html', form=form, translations=translations, lang=ilp, cs=cs)
def lower(s):
return s.lower()
@app.route('/gitreps/<string:name>/git-receive-pack', methods=['POST'])
@gitauth.login_required
def git_receive(name):
user = gitauth.username()
users_buf = list(map(lower, os.popen(f'bash get_auth.bash {name}').read().split('\n')))
if (user.lower() not in users_buf) and (len(users_buf) > 0):
if users_buf != ['']:
return "fuck you", 417
repoPath = os.path.join(DIR, 'storage', name)
p = subprocess.Popen(['git-receive-pack', '--stateless-rpc', repoPath], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.stdin.write(request.data)
p.stdin.flush()
data_out = p.stdout.read()
res = make_response(data_out)
res.headers['Expires'] = 'Fri, 01 Jan 1980 00:00:00 GMT'
res.headers['Pragma'] = 'no-cache'
res.headers['Cache-Control'] = 'no-cache, max-age=0, must-revalidate'
res.headers['Content-Type'] = 'application/x-git-receive-pack-result'
p.wait()
return res
@app.route('/gitinfo/<string:name>/branches')
def gitinfo_get_branches(name):
l = os.popen(f"bash git_get_branches.bash {name}").read().replace('* ', '').replace(' ', '')
return l
@app.route('/gitinfo/<string:name>/current_branch')
def gitinfo_current_branch(name):
return os.popen(f"bash gitinfo_get_main_branch.bash {name}").read()
@app.route('/gitinfo/<string:name>/<string:branch>/commit/<string:commit>')
def gitinfo_get_commits(name, branch, commit):
l = os.popen(f"bash git_get_branches.bash {name}").read().replace('* ', '').replace(' ', '')
@app.route('/gitreps/<string:name>/git-upload-pack', methods=['POST'])
@gitauth.login_required
def git_upload_pack(name):
repoPath = os.path.join(DIR, 'storage', name)
if 'Content-Encoding' in request.headers:
# gzip
app.logger.debug('Content-Encoding: ' + request.headers['Content-Encoding'])
reqData = gzip.decompress(request.data)
else:
reqData = request.data
p = subprocess.Popen(['git-upload-pack', '--stateless-rpc', repoPath], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.stdin.write(reqData)
p.stdin.flush()
data = p.stdout.read()
res = make_response(data)
res.headers['Expires'] = 'Fri, 01 Jan 1980 00:00:00 GMT'
res.headers['Pragma'] = 'no-cache'
res.headers['Cache-Control'] = 'no-cache, max-age=0, must-revalidate'
res.headers['Content-Type'] = 'application/x-git-upload-pack-result'
p.wait()
return res
@app.route('/gitinfo/<string:name>')
def get_allowed_to_repo(name):
return os.popen(f'bash get_auth.bash {name}').read()
@app.route('/gitinfo/<string:name>/<string:branch>/info_commits')
def get_commits(name, branch):
l = os.popen(f'bash git_get_all_commits.bash {name} {branch}').read().replace(f' (HEAD -> {branch})', '')
return l
@app.route('/gitinfo/<string:name>/<string:branch>/last_commit')
def get_last_commit(name, branch):
l = os.popen(f'bash git_get_all_commits.bash {name} {branch}').read().replace(f' (HEAD -> {branch})', '').split('\n')
return l[0]
def gitinfo_all_commits(name, branch):
l = get_commits(name, branch).replace('* ', '').replace(f' (HEAD -> {branch})', '').split('\n')
hsh, nm = [], []
for i in l:
hsh.append(l[:l.index(' ')])
nm.append(l[l.index(' ') + 1:])
return [hsh, nm]
@app.route('/gitinfo/<string:name>/commit/<string:commit>')
def gitinfo_commit(name, commit):
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
inb = ['ru', 'en', 'sp'].index(language)
ans = os.popen(f'bash git_show_commit.bash {name} {commit}').read()
return render_template('git_show_commit.html', name=name, text=ans, hash=commit, translations=translations, lang=inb, cs=cs,)
from io import BytesIO
@app.route('/archive/<string:name>')
def make_zip(name):
branch = request.args.get('branch', default=os.popen(f"bash gitinfo_get_main_branch.bash {name}").read())
path = os.path.join(DIR, 'storage', name)
outputpath = os.path.join(DIR, 'cache', name)
os.system(f'bash archive.bash {name} {branch}')
o = open(f'cache/{name}_{branch}.zip', 'rb').read()
os.system(f"rm -rf cache/{name}_{branch}.zip")
r = make_response(BytesIO(o))
r.headers['Content-Type'] = 'application/zip'
return r
@app.route('/gitreps/<string:name>')
def gitlook(name):
branch = request.args.get('branch', default=os.popen(f"bash gitinfo_get_main_branch.bash {name}").read())
cs = request.cookies.get('design', 'main.css')
ans = ''
branches_ = os.popen(f"bash git_get_branches.bash {name}").read().replace('* ', '').replace(' ', '').split('\n')
if branches_[-1] == '':
del branches_[-1]
last_commit = get_last_commit(name, branch).replace('* ', '')
language = request.cookies.get("language", 'ru')
inb = ['ru', 'en', 'sp'].index(language)
if os.path.exists(f'storage/{name}'):
files_ = os.popen(f'bash view.bash {name} {branch}').read().split()
if 'README.md' in files_:
vb = os.popen(f'bash viewb.bash {name} {branch}').read().replace('\t', ' ').split('\n')
for i in vb:
j = i.split(' ')
if j[-1].lower() == 'readme.md':
ans = j[2]
ans = os.popen(f'bash viewf.bash {name} {ans}').read()
break
return render_template('git_files.html', folder=None ,files=files_, branches=branches_, name=name, translations=translations, lang=inb, text=ans, cs=cs, branch=branch, last_commit_hash=last_commit[:last_commit.index(' ')], last_commit_name=last_commit[last_commit.index(' ') + 1:])
return render_template('git_files.html', folder=None, files=[],branches=branches_, name=name, translations=translations, lang=inb, cs=cs, branch=branch, last_commit_hash=last_commit[:last_commit.index(' ')], last_commit_name=last_commit[last_commit.index(' ') + 1:])
def all_folder(folder, files):
ans = []
l = len(folder)
for i in files:
if i[:l] == folder:
if '/' not in i[l+1:]:
ans.append(i[l+1:])
else:
le = i[l+1:].find('/')+1
ans.append(i[l+1:l+le])
return list(set(ans))
@app.route('/gitreps/<string:name>/<path:folder>')
def gitlookf(name, folder):
cs = request.cookies.get('design', 'main.css')
ans = ''
branch = request.args.get('branch', default=os.popen(f"bash gitinfo_get_main_branch.bash {name}").read())
branches_ = os.popen(f"bash git_get_branches.bash {name}").read().replace('* ', '').replace(' ', '').split('\n')
if branches_[-1] == '':
del branches_[-1]
language = request.cookies.get("language", 'ru')
inb = ['ru', 'en', 'sp'].index(language)
if os.path.exists(f'storage/{name}'):
files_ = all_folder(folder, os.popen(f'bash viewnbf.bash {name} {branch}').read().split())
if 'README.md' in files_:
vb = os.popen(f'bash viewb.bash {name} {branch}').read().replace('\t', ' ').split('\n')
for i in vb:
j = i.split(' ')
if j[-1].lower() == 'readme.md':
ans = j[2]
ans = os.popen(f'bash viewf.bash {name} {ans}').read()
break
return render_template('git_files.html', folder=folder, files=files_, name=name, translations=translations, lang=inb, text=ans, cs=cs, branch=branch, branches=branches_)
return render_template('git_files.html', folder=folder, files=[], name=name, translations=translations, lang=inb, cs=cs, branch=branch, branches=branches_)
def is_folder(folder, files):
l = len(folder)
for i in files:
if files[:l] == folder:
return 1
return 0
@app.route('/gitreps/<string:name>/<path:file>/look')
def view_file(name, file):
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
lan = ['ru', 'en', 'sp'].index(language)
ans = ''
branch = request.args.get('branch', default=os.popen(f"bash gitinfo_get_main_branch.bash {name}").read())
branches_ = os.popen(f"bash git_get_branches.bash {name}").read().replace('* ', '').replace(' ', '').split('\n')
if branches_[-1] == '':
del branches_[-1]
if os.path.exists(f'storage/{name}'):
r = os.popen(f'bash viewbf.bash {name} {branch}').read().replace('\t', ' ').split('\n')
for i in r:
j = i.split(' ')
if j[-1] == file:
ans = j[2]
filnam = j[-1]
break
if ans:
return render_template('git_view.html', text=os.popen(f'bash viewf.bash {name} {ans}').read(), name=name, filename=filnam, translations=translations, lang=lan, cs=cs)
else:
return redirect(f'/gitreps/{name}/{file}')
return 'no'
@app.route('/docs/why_registration')
def why_registration():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
return render_template('why_registration.html', translations=translations, lang=i, cs=cs)
phy = [
'Сила - количественная мера сил друг на друга',
'Сила определяет ускорение тела, но не его скорость',
'Траектория - кривая по которой движется тело',
'Перемещение - вектор из начального положения в конечное',
'Vсред по перемещению = вектор из начального положения в конечное / время',
'Инерция - Свойство тела оставаться в некоторых, называемых инерциальными, системах отсчёта в состоянии покоя или равномерного прямолинейного движения',
'Масса-это количество материи в физическом теле. Это также мера инерции тела',
'Инертность - это свойство тел по разному изменять свою скорость при действии на него одной и той же силы.',
'иннертность - способность тела сохранять свою скорость при действии внешней F',
'Импульс силы - F * дельта t - время действия силы на силу',
'Мощность - быстрота совершения работы',
'Потенциальные силы - Работа сил не зависит от траектории',
'Потенциальные(консервативные) силы - работа которых по замкнутуму контуру равна 0',
'Непотенциальные силы - силы, работа которых зависит от траектории',
'Амплитуда колебиания - максимальное смещение относительно состояния покоя',
'Центральный удар - Скорости направлены по линии, соединяющей центры масс тел',
'Масса - мера инертности.',
'Угловая скорость (W - омега) - скорость смены угла при движении по окружности',
'Закон изменения механическрй энергии в исо - изменение механической E в исо - сумма A внутренних сил трения и внешних сил на тело',
'Закон сохранения механической E - полная механическая E в замкнутой системе тел остается неизменной',
'Энергия - Скалярная физическая величина, являющаяся единой мерой различных форм движения и взаимодействия материи, мерой силы перехода движения материи из одних форм в другие для приведения её в состояние покоя. Введение понятия энергии удобно тем, что в случае, если физическая система является замкнутой, то её энергия сохраняется в этой системе на протяжении времени, в течение которого система будет являться замкнутой. Это утверждение носит название закона сохранения энергии',
'Потенциальная энергия системы - энергия взаимодействия тел. Она определяется вщаимным расположением тел или их частей и потенциальными силами взаимодействия между ними',
'Импульс тела — это характеристика движения тела, которая напрямую зависит от его массы и скорости.',
'работа - это энергия, передаваемая к объекту или от него посредством приложения силы вдоль смещения. ',
'A силы трения = -Fтр * S - так надо',
'A = F * S',
'Механическое движение - изменение положения относительно других тел с течением времени',
'Закон сложения скоростей - скорость тела относительно неподвижной системы отсчёта равна геометрической сумме двух скоростей — скорости тела относительно подвижной системы отсчёта и скорости подвижной системы отсчёта относительно неподвижной.',
'Первый закон Ньютона: если на тело не действуют никакие тела либо их действие взаимно уравновешено (скомпенсировано), то это тело будет находиться в состоянии покоя или двигаться равномерно и прямолинейно.',
'Второй закон Ньютона: В инерциальной системе отсчёта ускорение, которое получает материальная точка с постоянной массой, прямо пропорционально равнодействующей всех приложенных к ней сил и обратно пропорционально её массе. ',
'Третий закон Ньютона: Материальные точки взаимодействуют друг с другом силами, имеющими одинаковую природу, направленными вдоль прямой, соединяющей эти точки, равными по модулю и противоположными по направлению',
'Инерциа́льная систе́ма отсчёта (ИСО) — система отсчёта, в которой справедлив закон инерции: все свободные тела (то есть такие, на которые не действуют внешние силы или действие этих сил компенсируется) движутся прямолинейно и равномерно или покоятся[1]. Эквивалентной является следующая формулировка, удобная для использования в теоретической механике[2]: Инерциальной называется система отсчёта, по отношению к которой пространство является однородным и изотропным, а время — однородным.',
'Принцип относительности Галилея – это принцип физического равноправия инерциальных систем отсчёта в классической механике, проявляющегося в том, что законы механики во всех таких системах одинаковы.',
'Замкнутая система тел - система, где все тела взаимодействуют только между собой.',
'Мгновенная скорость - скорость в определённый момент времени',
'средняя скорость = вся S / все t',
'Средняя скорость - это та скорость, с которой должно двигаться тело равномерно, чтобы пройти данное расстояние за то же время, за которое оно его прошло, двигаясь неравномерно.',
'Паралелльное соединение пружин - F = F1 + F2 / x = x1 = x2 / kx = kx1 + kx2 / k = k1 + k2',
'Последовательное соединение пружин - F = F1 = F2 / x = x1 = x2 / F/k = F1/k1 + F2/k2 / 1/k + 1/k1 + 1/k2',
'В исо скорость мат. точки увеличивается если над ней совершают положительную работу и уменьшается если отрицательную',
'закон сохранения проекций импульса - если проекция на коорд ось исо суммы всех сил действующих на систему = 0, то проекция импульса на эту ось остается неизменной',
'гравитационная постоянная G - 6.67 * 10^-11 (Н*(м^2))/(кг^2)',
'сила тяготения - GmM/(r^2)',
'ацентростремительная - (V0^2)/(Rз + h) = g',
'mg = GmMз/((R + h)^2)',
'==> Vo^2 <= GMз/(Rз+h)',
'Vкруговая = sqrt(GMз/(Rз+h)) - круговая скорость',
'1) V < Vкр - эллипс упал на землю ',
'2) V = Vкр - окружность. Центр = центр земли',
'3) Vкр < V < sqrt(2) * Vкр - эллипс не упадет',
'4) V = sqrt(2) * Vкр - парабола (4-5 покинули землю)',
'5) V < sqrt(2) * Vкр - гипербола',
'1 космическая скорость V1 - скорость которую надо сообщить телу в горизонтальном направлении, чтобы оно двигалось по круговой траектории на небольшой высоте над поверхностью земли',
'2 космическая скорость V2 - скорость покидания-убегания планеты. V2 = sqrt(2) * V1 = sqrt(2 * G * Mз/Rз) = 11,2 км/c',
'геостанционарная орбита - тело зависло над одной точкой планеты 1) T = 24ч 2) V=Vкр, круговая траектория 3) направление вращения=направление вращения земли 4) плоскость орбиты = плоскость экватора',
'Основная задача кинематики – нахождение положения движущейся точки, ее скорости и ускорения в любой интересующий момент времени.',
'Систе́ма отсчёта — это совокупность неподвижных относительно друг друга тел (тело отсчёта), по отношению к которым рассматривается движение (в связанной с ними системе координат), и отсчитывающих время часов (системы отсчёта времени), по отношению к которым рассматривается движение каких-либо тел.',
'Абсолютно твёрдое тело — механическая система, обладающая только поступательными и вращательными степенями свободы. «Твёрдость» означает, что тело не может быть деформировано, то есть телу нельзя передать никакой другой энергии, кроме кинетической энергии поступательного или вращательного движения.',
'Золотое правило механики: во сколько раз мы выигрываем в силе, во столько раз проигрываем в расстоянии.',
'Закон сохранения энергии: полная механическая энергия замкнутой системы тел, взаимодействующих силами тяготения и упругости, остается неизменной.',
'Под полной механической энергией понимаем сумму кинетической и потенциальной энергий тел, составляющих систему.',
'Простые механизмы - механизмы, позволяющие уменьшить/увеличить прикладываемую силу (рычаг, блок, плоскость)',
'неподвижный блок - меняет вектор приложения силы',
'подвижный блок - может дать выигрыш в 2 раза (доказательство - 2T = mg по 2 закону)',
'простые механизмы не дают выигрыша в работе!!!',
'КПД механизма - отношение работы выполненной механизмом(полезной) к работе по приведению механизма в действие (затраченной)',
'Центр масс - точка приложения равнодействующей силы тяжести, действующей на все части тела',
'Центр масс - геометрическая точка, положение которой характеризует распределение масс в теле и определяется по формуле xцентра масс = (m1x1 + m2x2 + ... + mnxn) / (m1 + m2 + ... + mn)',
'Виды механического движения - поступательное, вращатлельное, колебательное',
'Виды равновесия - устойчивое(на дне чаши), неустойчивое(пик перевернутой чаши), безразличное(прямая)',
'Способ нахождения - геометрический, эксперементальный, алгебраический',
'Условие равновесия абсолютно твердого тела - главный вектор системы = 0 вектору и главный момент относительно любого полюса = 0',
'Теорема о движении центра масс - Vцм = (m1V1 + m2V2 + ... + mnVn) / (m1 + m2 + ... + mn) тоже самое с ускорением вместо скорости',
'условие равновесия тела 1) сумма F векторов = 0 вектор 2) сумма моментов = 0'
]
@app.route("/phys")
def phys():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
return render_template('phys.html', phy=phy, cs=cs)
last_input = 'echo hello world'
terminal_out = ''
ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])')
@app.route('/show_last_terminal_input', methods=['GET', 'POST'])
def s_l_term_inp():
global last_input
global terminal_out
d = request.get_data()
if d:
terminal_out += ansi_escape.sub('', d.decode('utf-8').replace('\x00', ''))
if last_input:
b = last_input
last_input = ''
return b
else:
return '\0'
@app.route('/termout')
def termout():
return terminal_out
@app.route("/terminal", methods=['GET', 'POST'])
def emulate_terminal():
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
global last_input
form = TerminalForm()
form.terminal.data = str(terminal_out)
if form.validate_on_submit():
last_input = form.inputfield.data
return redirect('/terminal')
return render_template("terminal.html", form=form, translations=translations, lang=i, out=terminal_out)
@app.route("/forums")
def forums_search():
return 0
@app.route('/snake')
def snake():
cs = request.cookies.get('design', 'main.css')
language = request.cookies.get("language", 'ru')
i = ['ru', 'en', 'sp'].index(language)
db_sess = db_session.create_session()
score_table = db_sess.query(Score).order_by(Score.score)
return render_template('snake.html', table=score_table, translations=translations, lang=i, cs=cs)
@app.route('/snake_commit', methods=['GET', 'POST'])
@login_required
def snake_commit():
if request.method == 'POST':
d = int(request.get_data().decode('utf-8'))
db_sess = db_session.create_session()
user = db_sess.query(Score).filter(Score.user_id == current_user.id).first()
if not user:
user = Score(
user_id = current_user.id,
user_name = current_user.name,
score = d
)
db_sess.add(user)
else:
if user.score < d:
user.score = d
db_sess.commit()
return f"ok - {user.score}"
vpnf = open("vpn.txt", "w")
@app.route("/vpn", methods=['GET', 'POST'])
def vpn():
vpnf.write(str(request.method) + " " + str(request.data))
return "ok"
@app.route("/librekombat", methods=['GET', 'POST'])
def hamster_combat():
id_ = request.args.get('id', default='0')
un_ = request.args.get('uname', default='0')
return render_template("libre_kombat.html", uid=id_, username=un_)
if __name__ == '__main__':
db_sess = db_session.create_session()
app.run(port=80, host="eneter_your_host_there")#host='gnu.librejokes.ru')