Merge branch 'frost' into blitzen
This commit is contained in:
commit
848bd2c099
30 changed files with 64 additions and 46 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -8,4 +8,5 @@ disablesignups
|
||||||
**/.pytest_cache/
|
**/.pytest_cache/
|
||||||
venv/
|
venv/
|
||||||
.vscode/
|
.vscode/
|
||||||
.sass-cache/
|
.sass-cache/
|
||||||
|
flask_session/
|
|
@ -13,7 +13,6 @@ services:
|
||||||
- DOMAIN=localhost
|
- DOMAIN=localhost
|
||||||
- SITE_NAME=Drama
|
- SITE_NAME=Drama
|
||||||
- GIPHY_KEY=3435tdfsdudebussylmaoxxt43
|
- GIPHY_KEY=3435tdfsdudebussylmaoxxt43
|
||||||
- FORCE_HTTPS=0
|
|
||||||
- DISCORD_SERVER_ID=3435tdfsdudebussylmaoxxt43
|
- DISCORD_SERVER_ID=3435tdfsdudebussylmaoxxt43
|
||||||
- DISCORD_CLIENT_ID=3435tdfsdudebussylmaoxxt43
|
- DISCORD_CLIENT_ID=3435tdfsdudebussylmaoxxt43
|
||||||
- DISCORD_CLIENT_SECRET=3435tdfsdudebussylmaoxxt43
|
- DISCORD_CLIENT_SECRET=3435tdfsdudebussylmaoxxt43
|
||||||
|
|
1
env
1
env
|
@ -3,7 +3,6 @@ export MASTER_KEY="XuxGqp5NyygJrM24b5gt3YgyvFVGdQnwVDwLzLwpu3eQwY"
|
||||||
export DOMAIN="localhost"
|
export DOMAIN="localhost"
|
||||||
export SITE_NAME="Drama"
|
export SITE_NAME="Drama"
|
||||||
export GIPHY_KEY="3435tdfsdudebussylmaoxxt43"
|
export GIPHY_KEY="3435tdfsdudebussylmaoxxt43"
|
||||||
export FORCE_HTTPS="0"
|
|
||||||
export DISCORD_SERVER_ID="3435tdfsdudebussylmaoxxt43"
|
export DISCORD_SERVER_ID="3435tdfsdudebussylmaoxxt43"
|
||||||
export DISCORD_CLIENT_ID="3435tdfsdudebussylmaoxxt43"
|
export DISCORD_CLIENT_ID="3435tdfsdudebussylmaoxxt43"
|
||||||
export DISCORD_CLIENT_SECRET="3435tdfsdudebussylmaoxxt43"
|
export DISCORD_CLIENT_SECRET="3435tdfsdudebussylmaoxxt43"
|
||||||
|
|
|
@ -8,6 +8,7 @@ from flask_limiter import Limiter
|
||||||
from flask_compress import Compress
|
from flask_compress import Compress
|
||||||
from flask_limiter.util import get_ipaddr
|
from flask_limiter.util import get_ipaddr
|
||||||
from flask_mail import Mail
|
from flask_mail import Mail
|
||||||
|
from flask_session import Session
|
||||||
|
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
from sqlalchemy.orm import sessionmaker, scoped_session
|
from sqlalchemy.orm import sessionmaker, scoped_session
|
||||||
|
@ -17,6 +18,8 @@ from werkzeug.middleware.proxy_fix import ProxyFix
|
||||||
import redis
|
import redis
|
||||||
|
|
||||||
app = Flask(__name__, template_folder='templates')
|
app = Flask(__name__, template_folder='templates')
|
||||||
|
app.config["SESSION_TYPE"] = "redis"
|
||||||
|
Session(app)
|
||||||
|
|
||||||
app.wsgi_app = ProxyFix(app.wsgi_app, x_for=3)
|
app.wsgi_app = ProxyFix(app.wsgi_app, x_for=3)
|
||||||
app.url_map.strict_slashes = False
|
app.url_map.strict_slashes = False
|
||||||
|
@ -24,6 +27,7 @@ app.jinja_env.cache = {}
|
||||||
app.jinja_env.auto_reload = True
|
app.jinja_env.auto_reload = True
|
||||||
import faulthandler
|
import faulthandler
|
||||||
faulthandler.enable()
|
faulthandler.enable()
|
||||||
|
|
||||||
|
|
||||||
app.config["SITE_NAME"]=environ.get("SITE_NAME").strip()
|
app.config["SITE_NAME"]=environ.get("SITE_NAME").strip()
|
||||||
app.config["COINS_NAME"]=environ.get("COINS_NAME").strip()
|
app.config["COINS_NAME"]=environ.get("COINS_NAME").strip()
|
||||||
|
@ -36,14 +40,13 @@ app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 86400
|
||||||
app.config["SESSION_COOKIE_NAME"] = f'session_{environ.get("DOMAIN")}'.strip().lower()
|
app.config["SESSION_COOKIE_NAME"] = f'session_{environ.get("DOMAIN")}'.strip().lower()
|
||||||
app.config["VERSION"] = "1.0.0"
|
app.config["VERSION"] = "1.0.0"
|
||||||
app.config['MAX_CONTENT_LENGTH'] = 8 * 1024 * 1024
|
app.config['MAX_CONTENT_LENGTH'] = 8 * 1024 * 1024
|
||||||
app.config["SESSION_COOKIE_SECURE"] = bool(int(environ.get("FORCE_HTTPS", 1)))
|
app.config["SESSION_COOKIE_SECURE"] = True
|
||||||
app.config["SESSION_COOKIE_SAMESITE"] = "Lax"
|
app.config["SESSION_COOKIE_SAMESITE"] = "Lax"
|
||||||
app.config["PERMANENT_SESSION_LIFETIME"] = 60 * 60 * 24 * 365
|
app.config["PERMANENT_SESSION_LIFETIME"] = 60 * 60 * 24 * 365
|
||||||
app.config["SESSION_REFRESH_EACH_REQUEST"] = True
|
|
||||||
app.config["SLOGAN"] = environ.get("SLOGAN", "").strip()
|
app.config["SLOGAN"] = environ.get("SLOGAN", "").strip()
|
||||||
app.config["DEFAULT_COLOR"] = environ.get("DEFAULT_COLOR", "ff0000").strip()
|
app.config["DEFAULT_COLOR"] = environ.get("DEFAULT_COLOR", "ff0000").strip()
|
||||||
app.config["DEFAULT_THEME"] = environ.get("DEFAULT_THEME", "midnight").strip()
|
app.config["DEFAULT_THEME"] = environ.get("DEFAULT_THEME", "midnight").strip()
|
||||||
app.config["FORCE_HTTPS"] = int(environ.get("FORCE_HTTPS", 1)) if ("localhost" not in app.config["SERVER_NAME"] and "localhost" not in app.config["SERVER_NAME"]) else 0
|
app.config["FORCE_HTTPS"] = True
|
||||||
app.config["UserAgent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36"
|
app.config["UserAgent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36"
|
||||||
app.config["HCAPTCHA_SITEKEY"] = environ.get("HCAPTCHA_SITEKEY","").strip()
|
app.config["HCAPTCHA_SITEKEY"] = environ.get("HCAPTCHA_SITEKEY","").strip()
|
||||||
app.config["HCAPTCHA_SECRET"] = environ.get("HCAPTCHA_SECRET","").strip()
|
app.config["HCAPTCHA_SECRET"] = environ.get("HCAPTCHA_SECRET","").strip()
|
||||||
|
@ -59,7 +62,7 @@ app.config["RATELIMIT_ENABLED"] = True
|
||||||
app.config["RATELIMIT_DEFAULTS_DEDUCT_WHEN"]=lambda:True
|
app.config["RATELIMIT_DEFAULTS_DEDUCT_WHEN"]=lambda:True
|
||||||
app.config["RATELIMIT_DEFAULTS_EXEMPT_WHEN"]=lambda:False
|
app.config["RATELIMIT_DEFAULTS_EXEMPT_WHEN"]=lambda:False
|
||||||
app.config["RATELIMIT_HEADERS_ENABLED"]=True
|
app.config["RATELIMIT_HEADERS_ENABLED"]=True
|
||||||
app.config["CACHE_TYPE"] = "filesystem"
|
app.config["CACHE_TYPE"] = "redis"
|
||||||
app.config["CACHE_DIR"] = "cache"
|
app.config["CACHE_DIR"] = "cache"
|
||||||
app.config["RATELIMIT_STORAGE_URL"] = environ.get("REDIS_URL", "redis://localhost")
|
app.config["RATELIMIT_STORAGE_URL"] = environ.get("REDIS_URL", "redis://localhost")
|
||||||
app.config['MAIL_SERVER'] = 'smtp.gmail.com'
|
app.config['MAIL_SERVER'] = 'smtp.gmail.com'
|
||||||
|
@ -68,6 +71,10 @@ app.config['MAIL_USE_TLS'] = True
|
||||||
app.config['MAIL_USERNAME'] = environ.get("MAIL_USERNAME", "").strip()
|
app.config['MAIL_USERNAME'] = environ.get("MAIL_USERNAME", "").strip()
|
||||||
app.config['MAIL_PASSWORD'] = environ.get("MAIL_PASSWORD", "").strip()
|
app.config['MAIL_PASSWORD'] = environ.get("MAIL_PASSWORD", "").strip()
|
||||||
|
|
||||||
|
app.config["SESSION_USE_SIGNER"] = True
|
||||||
|
app.config["SESSION_COOKIE_DOMAIN"] = app.config["SERVER_NAME"]
|
||||||
|
|
||||||
|
|
||||||
r=redis.Redis(host=environ.get("REDIS_URL", "redis://localhost"), decode_responses=True, ssl_cert_reqs=None)
|
r=redis.Redis(host=environ.get("REDIS_URL", "redis://localhost"), decode_responses=True, ssl_cert_reqs=None)
|
||||||
|
|
||||||
limiter = Limiter(
|
limiter = Limiter(
|
||||||
|
@ -101,9 +108,9 @@ def before_request():
|
||||||
|
|
||||||
if not request.path.startswith("/assets") and not request.path.startswith("/images") and not request.path.startswith("/hostedimages"):
|
if not request.path.startswith("/assets") and not request.path.startswith("/images") and not request.path.startswith("/hostedimages"):
|
||||||
session.permanent = True
|
session.permanent = True
|
||||||
if not session.get("session_id"): session["session_id"] = secrets.token_hex(16)
|
if not session.get("session_id"): session["session_id"] = secrets.token_hex(50)
|
||||||
|
|
||||||
if app.config["FORCE_HTTPS"] and request.url.startswith("http://") and "localhost" not in app.config["SERVER_NAME"]:
|
if request.url.startswith("http://") and "localhost" not in app.config["SERVER_NAME"]:
|
||||||
url = request.url.replace("http://", "https://", 1)
|
url = request.url.replace("http://", "https://", 1)
|
||||||
return redirect(url, code=301)
|
return redirect(url, code=301)
|
||||||
|
|
||||||
|
|
|
@ -4669,4 +4669,7 @@ input[type=radio] ~ .custom-control-label::before {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
-o-object-fit: contain;
|
-o-object-fit: contain;
|
||||||
object-fit: contain;
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
.preview-edit img {
|
||||||
|
max-width: 20%;
|
||||||
}
|
}
|
|
@ -302,7 +302,7 @@ class User(Base):
|
||||||
def formkey(self):
|
def formkey(self):
|
||||||
|
|
||||||
if "session_id" not in session:
|
if "session_id" not in session:
|
||||||
session["session_id"] = token_hex(16)
|
session["session_id"] = token_hex(50)
|
||||||
|
|
||||||
msg = f"{session['session_id']}+{self.id}+{self.login_nonce}"
|
msg = f"{session['session_id']}+{self.id}+{self.login_nonce}"
|
||||||
|
|
||||||
|
@ -377,6 +377,10 @@ class User(Base):
|
||||||
def post_notifications_count(self):
|
def post_notifications_count(self):
|
||||||
return g.db.query(Notification.id).join(Comment).filter(Notification.user_id == self.id, Notification.read == False, Comment.author_id == AUTOJANNY_ID).count()
|
return g.db.query(Notification.id).join(Comment).filter(Notification.user_id == self.id, Notification.read == False, Comment.author_id == AUTOJANNY_ID).count()
|
||||||
|
|
||||||
|
@property
|
||||||
|
@lazy
|
||||||
|
def not_post_notifications_count(self):
|
||||||
|
return self.notifications_count - self.post_notifications_count
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@lazy
|
@lazy
|
||||||
|
|
|
@ -1030,8 +1030,12 @@ def api_sticky_post(post_id, v):
|
||||||
else: post.stickied = None
|
else: post.stickied = None
|
||||||
else:
|
else:
|
||||||
pins = g.db.query(Submission.id).filter(Submission.stickied != None, Submission.is_banned == False).count()
|
pins = g.db.query(Submission.id).filter(Submission.stickied != None, Submission.is_banned == False).count()
|
||||||
if pins > 2: return {"error": "Can't exceed 3 pinned posts limit!"}, 403
|
if pins > 2:
|
||||||
post.stickied = v.username
|
if v.admin_level > 2:
|
||||||
|
t = int(time.time()) + 3600
|
||||||
|
post.stickied = f"t:{t}"
|
||||||
|
else: return {"error": "Can't exceed 3 pinned posts limit!"}, 403
|
||||||
|
else: post.stickied = v.username
|
||||||
g.db.add(post)
|
g.db.add(post)
|
||||||
|
|
||||||
ma=ModAction(
|
ma=ModAction(
|
||||||
|
|
|
@ -136,7 +136,7 @@ def login_post():
|
||||||
|
|
||||||
session["user_id"] = account.id
|
session["user_id"] = account.id
|
||||||
session["logged_in"] = account.id
|
session["logged_in"] = account.id
|
||||||
session["session_id"] = token_hex(16)
|
session["session_id"] = token_hex(50)
|
||||||
session["login_nonce"] = account.login_nonce
|
session["login_nonce"] = account.login_nonce
|
||||||
session.permanent = True
|
session.permanent = True
|
||||||
|
|
||||||
|
@ -343,7 +343,7 @@ def sign_up_post(v):
|
||||||
|
|
||||||
session["user_id"] = new_user.id
|
session["user_id"] = new_user.id
|
||||||
session["logged_in"] = new_user.id
|
session["logged_in"] = new_user.id
|
||||||
session["session_id"] = token_hex(16)
|
session["session_id"] = token_hex(50)
|
||||||
|
|
||||||
g.db.commit()
|
g.db.commit()
|
||||||
|
|
||||||
|
|
|
@ -104,10 +104,10 @@ def cached_chart(days):
|
||||||
days = int((nowstamp - firstsignup) / 86400)
|
days = int((nowstamp - firstsignup) / 86400)
|
||||||
|
|
||||||
if days > 31:
|
if days > 31:
|
||||||
file = "/weekly_chart.webp"
|
file = "/weekly_chart.png"
|
||||||
day_cutoffs = [today_cutoff - 86400 * 7 * i for i in range(31)][1:]
|
day_cutoffs = [today_cutoff - 86400 * 7 * i for i in range(31)][1:]
|
||||||
else:
|
else:
|
||||||
file = "/daily_chart.webp"
|
file = "/daily_chart.png"
|
||||||
day_cutoffs = [today_cutoff - 86400 * i for i in range(31)][1:]
|
day_cutoffs = [today_cutoff - 86400 * i for i in range(31)][1:]
|
||||||
|
|
||||||
day_cutoffs.insert(0, calendar.timegm(now))
|
day_cutoffs.insert(0, calendar.timegm(now))
|
||||||
|
|
|
@ -14,11 +14,11 @@
|
||||||
|
|
||||||
{% if v %}
|
{% if v %}
|
||||||
<style>:root{--primary:#{{v.themecolor}}}</style>
|
<style>:root{--primary:#{{v.themecolor}}}</style>
|
||||||
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=438"><link rel="stylesheet" href="/assets/CHRISTMAS/css/{{v.theme}}.css?v=200">
|
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=439"><link rel="stylesheet" href="/assets/CHRISTMAS/css/{{v.theme}}.css?v=200">
|
||||||
{% if v.agendaposter %}<link rel="stylesheet" href="/assets/CHRISTMAS/css/agendaposter.css?v=200">{% elif v.css %}<link rel="stylesheet" href="/@{{v.username}}/css">{% endif %}
|
{% if v.agendaposter %}<link rel="stylesheet" href="/assets/CHRISTMAS/css/agendaposter.css?v=200">{% elif v.css %}<link rel="stylesheet" href="/@{{v.username}}/css">{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||||
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=438"><link rel="stylesheet" href="/assets/CHRISTMAS/css/{{'DEFAULT_THEME' | app_config}}.css?v=200">
|
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=439"><link rel="stylesheet" href="/assets/CHRISTMAS/css/{{'DEFAULT_THEME' | app_config}}.css?v=200">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -186,9 +186,9 @@
|
||||||
|
|
||||||
{% block stylesheets %}
|
{% block stylesheets %}
|
||||||
|
|
||||||
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=438">
|
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=439">
|
||||||
|
|
||||||
<link rel="stylesheet" href="/static/dist/main.css?v=438">
|
<link rel="stylesheet" href="/static/dist/main.css?v=439">
|
||||||
|
|
||||||
<link rel="stylesheet" href="/assets/CHRISTMAS/css/mistletoe.css?v=400">
|
<link rel="stylesheet" href="/assets/CHRISTMAS/css/mistletoe.css?v=400">
|
||||||
|
|
||||||
|
|
|
@ -13,9 +13,9 @@
|
||||||
<title>Login - {{'SITE_NAME' | app_config}}</title>
|
<title>Login - {{'SITE_NAME' | app_config}}</title>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=438">
|
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=439">
|
||||||
|
|
||||||
<link rel="stylesheet" href="/static/dist/main.css?v=438">
|
<link rel="stylesheet" href="/static/dist/main.css?v=439">
|
||||||
|
|
||||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<title>2-Step Login - {{'SITE_NAME' | app_config}}</title>
|
<title>2-Step Login - {{'SITE_NAME' | app_config}}</title>
|
||||||
|
|
||||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||||
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=438"><link rel="stylesheet" href="/assets/CHRISTMAS/css/{{'DEFAULT_THEME' | app_config}}.css?v=200">
|
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=439"><link rel="stylesheet" href="/assets/CHRISTMAS/css/{{'DEFAULT_THEME' | app_config}}.css?v=200">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|
|
@ -28,9 +28,9 @@
|
||||||
|
|
||||||
{% block stylesheets %}
|
{% block stylesheets %}
|
||||||
|
|
||||||
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=438">
|
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=439">
|
||||||
|
|
||||||
<link rel="stylesheet" href="/static/dist/main.css?v=438">
|
<link rel="stylesheet" href="/static/dist/main.css?v=439">
|
||||||
|
|
||||||
<link rel="stylesheet" href="/assets/CHRISTMAS/css/mistletoe.css?v=400">
|
<link rel="stylesheet" href="/assets/CHRISTMAS/css/mistletoe.css?v=400">
|
||||||
|
|
||||||
|
|
|
@ -26,9 +26,9 @@
|
||||||
|
|
||||||
<title>{% if ref_user %}{{ref_user.username}} invites you to {{'SITE_NAME' | app_config}}{% else %}Sign up - {{'SITE_NAME' | app_config}}{% endif %}</title>
|
<title>{% if ref_user %}{{ref_user.username}} invites you to {{'SITE_NAME' | app_config}}{% else %}Sign up - {{'SITE_NAME' | app_config}}{% endif %}</title>
|
||||||
|
|
||||||
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=438">
|
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=439">
|
||||||
|
|
||||||
<link rel="stylesheet" href="/static/dist/main.css?v=438">
|
<link rel="stylesheet" href="/static/dist/main.css?v=439">
|
||||||
|
|
||||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
<title>{% if ref_user %}{{ref_user.username}} invites you to {{'SITE_NAME' | app_config}}{% else %}{{'SITE_NAME' | app_config}}{% endif %}</title>
|
<title>{% if ref_user %}{{ref_user.username}} invites you to {{'SITE_NAME' | app_config}}{% else %}{{'SITE_NAME' | app_config}}{% endif %}</title>
|
||||||
|
|
||||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||||
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=438"><link rel="stylesheet" href="/assets/CHRISTMAS/css/{{'DEFAULT_THEME' | app_config}}.css?v=200">
|
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?v=439"><link rel="stylesheet" href="/assets/CHRISTMAS/css/{{'DEFAULT_THEME' | app_config}}.css?v=200">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
<link rel="stylesheet" href="/static/dist/main.css?v=438">
|
<link rel="stylesheet" href="/static/dist/main.css?v=439">
|
||||||
|
|
||||||
<title>Flask + Tailwind CSS</title>
|
<title>Flask + Tailwind CSS</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -14,11 +14,11 @@
|
||||||
|
|
||||||
{% if v %}
|
{% if v %}
|
||||||
<style>:root{--primary:#{{v.themecolor}}}</style>
|
<style>:root{--primary:#{{v.themecolor}}}</style>
|
||||||
<link rel="stylesheet" href="/assets/css/main.css?v=438"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=191">
|
<link rel="stylesheet" href="/assets/css/main.css?v=439"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=191">
|
||||||
{% if v.agendaposter %}<link rel="stylesheet" href="/assets/css/agendaposter.css?v=190">{% elif v.css %}<link rel="stylesheet" href="/@{{v.username}}/css">{% endif %}
|
{% if v.agendaposter %}<link rel="stylesheet" href="/assets/css/agendaposter.css?v=190">{% elif v.css %}<link rel="stylesheet" href="/@{{v.username}}/css">{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||||
<link rel="stylesheet" href="/assets/css/main.css?v=438"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
<link rel="stylesheet" href="/assets/css/main.css?v=439"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -297,7 +297,7 @@
|
||||||
<a href="javascript:void(0)" form="comment-edit-form-{{c.id}}" class="btn btn-primary ml-2 fl-r commentmob" onclick="comment_edit('{{c.id}}')">Save Edit</a>
|
<a href="javascript:void(0)" form="comment-edit-form-{{c.id}}" class="btn btn-primary ml-2 fl-r commentmob" onclick="comment_edit('{{c.id}}')">Save Edit</a>
|
||||||
<a id="cancel-edit-{{c.id}}" href="javascript:void(0)" onclick="toggleEdit('{{c.id}}')" class="btn btn-link text-muted ml-auto cancel-form fl-r commentmob">Cancel</a>
|
<a id="cancel-edit-{{c.id}}" href="javascript:void(0)" onclick="toggleEdit('{{c.id}}')" class="btn btn-link text-muted ml-auto cancel-form fl-r commentmob">Cancel</a>
|
||||||
</form>
|
</form>
|
||||||
<div id="preview-edit-{{c.id}}" class="mb-3 mt-5"></div>
|
<div id="preview-edit-{{c.id}}" class="preview-edit mb-3 mt-5"></div>
|
||||||
<div class="form-text text-small p-0 m-0"><a href="/formatting" {% if v and v.newtab %}target="_blank"{% endif %}>Formatting help</a></div>
|
<div class="form-text text-small p-0 m-0"><a href="/formatting" {% if v and v.newtab %}target="_blank"{% endif %}>Formatting help</a></div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -6,12 +6,12 @@
|
||||||
<script src="/assets/js/bootstrap.js?v=190"></script>
|
<script src="/assets/js/bootstrap.js?v=190"></script>
|
||||||
{% if v %}
|
{% if v %}
|
||||||
<style>:root{--primary:#{{v.themecolor}}}</style>
|
<style>:root{--primary:#{{v.themecolor}}}</style>
|
||||||
<link rel="stylesheet" href="/assets/css/main.css?v=438">
|
<link rel="stylesheet" href="/assets/css/main.css?v=439">
|
||||||
<link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=191">
|
<link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=191">
|
||||||
{% if v.agendaposter %}<link rel="stylesheet" href="/assets/css/agendaposter.css?v=190">{% elif v.css %}<link rel="stylesheet" href="/@{{v.username}}/css">{% endif %}
|
{% if v.agendaposter %}<link rel="stylesheet" href="/assets/css/agendaposter.css?v=190">{% elif v.css %}<link rel="stylesheet" href="/@{{v.username}}/css">{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||||
<link rel="stylesheet" href="/assets/css/main.css?v=438"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
<link rel="stylesheet" href="/assets/css/main.css?v=439"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<link href="/assets/css/fa.css?v=193" rel="stylesheet">
|
<link href="/assets/css/fa.css?v=193" rel="stylesheet">
|
||||||
|
|
|
@ -6,11 +6,11 @@
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% if v %}
|
{% if v %}
|
||||||
<style>:root{--primary:#{{v.themecolor}}}</style>
|
<style>:root{--primary:#{{v.themecolor}}}</style>
|
||||||
<link rel="stylesheet" href="/assets/css/main.css?v=438"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=191">
|
<link rel="stylesheet" href="/assets/css/main.css?v=439"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=191">
|
||||||
{% if v.agendaposter %}<link rel="stylesheet" href="/assets/css/agendaposter.css?v=190">{% elif v.css %}<link rel="stylesheet" href="/@{{v.username}}/css">{% endif %}
|
{% if v.agendaposter %}<link rel="stylesheet" href="/assets/css/agendaposter.css?v=190">{% elif v.css %}<link rel="stylesheet" href="/@{{v.username}}/css">{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||||
<link rel="stylesheet" href="/assets/css/main.css?v=438"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
<link rel="stylesheet" href="/assets/css/main.css?v=439"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<div class="row justify-content-around">
|
<div class="row justify-content-around">
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||||
<link rel="stylesheet" href="/assets/css/main.css?v=438">
|
<link rel="stylesheet" href="/assets/css/main.css?v=439">
|
||||||
<link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
<link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
||||||
<link href="/assets/css/fa.css?v=193" rel="stylesheet">
|
<link href="/assets/css/fa.css?v=193" rel="stylesheet">
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<title>2-Step Login - {{'SITE_NAME' | app_config}}</title>
|
<title>2-Step Login - {{'SITE_NAME' | app_config}}</title>
|
||||||
|
|
||||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||||
<link rel="stylesheet" href="/assets/css/main.css?v=438"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
<link rel="stylesheet" href="/assets/css/main.css?v=439"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
<ul class="nav settings-nav" style="padding:0 30px;">
|
<ul class="nav settings-nav" style="padding:0 30px;">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link py-3{% if not '=true' in request.full_path %} active{% endif %}" href="/notifications">
|
<a class="nav-link py-3{% if not '=true' in request.full_path %} active{% endif %}" href="/notifications">
|
||||||
All
|
All{% if v.not_post_notifications_count %} <span class="text-primary font-weight-bold">({{v.not_post_notifications_count}})</span>{% endif %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
|
|
||||||
|
|
||||||
<style>:root{--primary:#{{v.themecolor}}}</style>
|
<style>:root{--primary:#{{v.themecolor}}}</style>
|
||||||
<link rel="stylesheet" href="/assets/css/main.css?v=438"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=191">
|
<link rel="stylesheet" href="/assets/css/main.css?v=439"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=191">
|
||||||
{% if v.agendaposter %}<link rel="stylesheet" href="/assets/css/agendaposter.css?v=190">{% elif v.css %}<link rel="stylesheet" href="/@{{v.username}}/css">{% endif %}
|
{% if v.agendaposter %}<link rel="stylesheet" href="/assets/css/agendaposter.css?v=190">{% elif v.css %}<link rel="stylesheet" href="/@{{v.username}}/css">{% endif %}
|
||||||
|
|
||||||
<link href="/assets/css/fa.css?v=193" rel="stylesheet">
|
<link href="/assets/css/fa.css?v=193" rel="stylesheet">
|
||||||
|
|
|
@ -38,10 +38,10 @@
|
||||||
|
|
||||||
{% if v %}
|
{% if v %}
|
||||||
<style>:root{--primary:#{{v.themecolor}}}</style>
|
<style>:root{--primary:#{{v.themecolor}}}</style>
|
||||||
<link rel="stylesheet" href="/assets/css/main.css?v=438"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=191">
|
<link rel="stylesheet" href="/assets/css/main.css?v=439"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=191">
|
||||||
{% else %}
|
{% else %}
|
||||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||||
<link rel="stylesheet" href="/assets/css/main.css?v=438"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
<link rel="stylesheet" href="/assets/css/main.css?v=439"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<link href="/assets/css/fa.css?v=193" rel="stylesheet">
|
<link href="/assets/css/fa.css?v=193" rel="stylesheet">
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
<title>{% if ref_user %}{{ref_user.username}} invites you to {{'SITE_NAME' | app_config}}{% else %}Sign up - {{'SITE_NAME' | app_config}}{% endif %}</title>
|
<title>{% if ref_user %}{{ref_user.username}} invites you to {{'SITE_NAME' | app_config}}{% else %}Sign up - {{'SITE_NAME' | app_config}}{% endif %}</title>
|
||||||
|
|
||||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||||
<link rel="stylesheet" href="/assets/css/main.css?v=438"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
<link rel="stylesheet" href="/assets/css/main.css?v=439"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
<title>{% if ref_user %}{{ref_user.username}} invites you to {{'SITE_NAME' | app_config}}{% else %}{{'SITE_NAME' | app_config}}{% endif %}</title>
|
<title>{% if ref_user %}{{ref_user.username}} invites you to {{'SITE_NAME' | app_config}}{% else %}{{'SITE_NAME' | app_config}}{% endif %}</title>
|
||||||
|
|
||||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||||
<link rel="stylesheet" href="/assets/css/main.css?v=438"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
<link rel="stylesheet" href="/assets/css/main.css?v=439"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|
|
@ -25,11 +25,11 @@
|
||||||
{% block stylesheets %}
|
{% block stylesheets %}
|
||||||
{% if v %}
|
{% if v %}
|
||||||
<style>:root{--primary:#{{v.themecolor}}}</style>
|
<style>:root{--primary:#{{v.themecolor}}}</style>
|
||||||
<link rel="stylesheet" href="/assets/css/main.css?v=438"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=191">
|
<link rel="stylesheet" href="/assets/css/main.css?v=439"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=191">
|
||||||
{% if v.agendaposter %}<link rel="stylesheet" href="/assets/css/agendaposter.css?v=190">{% elif v.css %}<link rel="stylesheet" href="/@{{v.username}}/css">{% endif %}
|
{% if v.agendaposter %}<link rel="stylesheet" href="/assets/css/agendaposter.css?v=190">{% elif v.css %}<link rel="stylesheet" href="/@{{v.username}}/css">{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||||
<link rel="stylesheet" href="/assets/css/main.css?v=438">
|
<link rel="stylesheet" href="/assets/css/main.css?v=439">
|
||||||
<link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
<link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=191">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -6,6 +6,7 @@ Flask-Caching
|
||||||
Flask-Compress
|
Flask-Compress
|
||||||
Flask-Limiter==1.1.0
|
Flask-Limiter==1.1.0
|
||||||
Flask-Mail==0.9.1
|
Flask-Mail==0.9.1
|
||||||
|
Flask-Session
|
||||||
gevent
|
gevent
|
||||||
greenlet
|
greenlet
|
||||||
gunicorn
|
gunicorn
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue