diff --git a/docker-compose.yml b/docker-compose.yml index ad835c98e..0830e86cb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -37,6 +37,8 @@ services: - READ_ONLY=0 - BOT_DISABLE=0 - COINS_NAME=Dramacoins + - DEFAULT_THEME=dark + - DEFAULT_COLOR=ff66ac links: - "redis" - "postgres" diff --git a/files/__main__.py b/files/__main__.py index 277ebb99c..712b11a9c 100644 --- a/files/__main__.py +++ b/files/__main__.py @@ -36,7 +36,7 @@ app.config['DATABASE_URL'] = environ.get("DATABASE_CONNECTION_POOL_URL",environ. app.config['SECRET_KEY'] = environ.get('MASTER_KEY') app.config["SERVER_NAME"] = environ.get("DOMAIN").strip() -app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 31536000 +app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 86400 app.config["SESSION_COOKIE_NAME"] = "session_" + environ.get("SITE_NAME").strip().lower() app.config["VERSION"] = "1.0.0" @@ -47,6 +47,8 @@ app.config["SESSION_COOKIE_SAMESITE"] = "Lax" app.config["PERMANENT_SESSION_LIFETIME"] = 60 * 60 * 24 * 365 app.config["SESSION_REFRESH_EACH_REQUEST"] = True +app.config["DEFAULT_THEME"] = environ.get("defaulttheme").strip() + "_" + environ.get("defaultcolor").strip() + app.config["FORCE_HTTPS"] = int(environ.get("FORCE_HTTPS", 1)) if ("localhost" not in app.config["SERVER_NAME"] and "127.0.0.1" not in app.config["SERVER_NAME"]) else 0 app.jinja_env.cache = {} diff --git a/files/classes/comment.py b/files/classes/comment.py index 164105278..43d261d60 100644 --- a/files/classes/comment.py +++ b/files/classes/comment.py @@ -246,7 +246,7 @@ class Comment(Base, Age_times, Scores, Stndrd, Fuzzing): def realbody(self, v): body = self.comment_aux.body_html - if not v or v.slurreplacer: body = body.replace(" nigger"," π").replace(" Nigger"," π").replace(" NIGGER"," π").replace(" pedo"," libertarian").replace(" Pedo"," Libertarian ").replace(" PEDO"," LIBERTARIAN ").replace(" tranny"," π").replace(" Tranny"," π").replace(" TRANNY"," π").replace(" fag"," cute twink").replace(" Fag"," Cute twink").replace(" FAG"," CUTE TWINK").replace(" faggot"," cute twink").replace(" Faggot"," Cute twink").replace(" FAGGOT"," CUTE TWINK").replace(" trump"," DDR").replace(" Trump"," DDR").replace(" TRUMP"," DDR").replace(" biden"," DDD").replace(" Biden"," DDD").replace(" BIDEN"," DDD").replace(" steve akins"," penny verity oaken").replace(" Steve Akins"," Penny Verity Oaken").replace(" STEVE AKINS"," PENNY VERITY OAKEN").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" kill yourself"," keep yourself safe").replace(" KILL YOURSELF"," KEEP YOURSELF SAFE").replace(" trannie"," π").replace(" Trannie"," π").replace(" TRANNIE"," π").replace(" troon"," π").replace(" Troon"," π").replace(" TROON"," π") + if not v or v.slurreplacer: body = body.replace(" nigger"," π").replace(" Nigger"," π").replace(" NIGGER"," π").replace(" pedo"," libertarian").replace(" Pedo"," Libertarian ").replace(" PEDO"," LIBERTARIAN ").replace(" tranny"," π").replace(" Tranny"," π").replace(" TRANNY"," π").replace(" fag"," cute twink").replace(" Fag"," Cute twink").replace(" FAG"," CUTE TWINK").replace(" faggot"," cute twink").replace(" Faggot"," Cute twink").replace(" FAGGOT"," CUTE TWINK").replace(" steve akins"," penny verity oaken").replace(" Steve Akins"," Penny Verity Oaken").replace(" STEVE AKINS"," PENNY VERITY OAKEN").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" kill yourself"," keep yourself safe").replace(" KILL YOURSELF"," KEEP YOURSELF SAFE").replace(" trannie"," π").replace(" Trannie"," π").replace(" TRANNIE"," π").replace(" troon"," π").replace(" Troon"," π").replace(" TROON"," π") if v and not v.oldreddit: body = body.replace("old.reddit.com", "reddit.com") if v and v.controversial: diff --git a/files/classes/images.py b/files/classes/images.py index 9f635cc10..9b1318763 100644 --- a/files/classes/images.py +++ b/files/classes/images.py @@ -1,7 +1,9 @@ from sqlalchemy import * from flask import g from files.__main__ import Base +from os import environ +site = environ.get("DOMAIN").strip() class Image(Base): __tablename__ = "images" @@ -11,9 +13,9 @@ class Image(Base): text = Column(String(64)) deletehash = Column(String(64)) + @property - def path(self): - return f"/assets/images/cover.png" + def path(self): return f"/assets/images/{site}/cover.png" diff --git a/files/classes/submission.py b/files/classes/submission.py index 6b9b160ee..20bbe318b 100644 --- a/files/classes/submission.py +++ b/files/classes/submission.py @@ -203,7 +203,7 @@ class Submission(Base, Stndrd, Age_times, Scores, Fuzzing): @lazy def thumb_url(self): if self.over_18: return f"https://{site}/assets/images/nsfw.png" - elif not self.url: return f"https://{site}/assets/images/default_thumb_text.png" + elif not self.url: return f"https://{site}/assets/images/{site}/default_thumb_text.png" elif self.thumburl: return self.thumburl elif "youtu.be" in self.domain or "youtube.com" in self.domain: return f"https://{site}/assets/images/default_thumb_yt.png" else: return f"https://{site}/assets/images/default_thumb_link.png" @@ -341,7 +341,7 @@ class Submission(Base, Stndrd, Age_times, Scores, Fuzzing): def realbody(self, v): body = self.submission_aux.body_html - if not v or v.slurreplacer: body = body.replace(" nigger"," π").replace(" Nigger"," π").replace(" NIGGER"," π").replace(" pedo"," libertarian").replace(" Pedo"," Libertarian ").replace(" PEDO"," LIBERTARIAN ").replace(" tranny"," π").replace(" Tranny"," π").replace(" TRANNY"," π").replace(" fag"," cute twink").replace(" Fag"," Cute twink").replace(" FAG"," CUTE TWINK").replace(" faggot"," cute twink").replace(" Faggot"," Cute twink").replace(" FAGGOT"," CUTE TWINK").replace(" trump"," DDR").replace(" Trump"," DDR").replace(" TRUMP"," DDR").replace(" biden"," DDD").replace(" Biden"," DDD").replace(" BIDEN"," DDD").replace(" steve akins"," penny verity oaken").replace(" Steve Akins"," Penny Verity Oaken").replace(" STEVE AKINS"," PENNY VERITY OAKEN").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" kill yourself"," keep yourself safe").replace(" KILL YOURSELF"," KEEP YOURSELF SAFE").replace(" trannie"," π").replace(" Trannie"," π").replace(" TRANNIE"," π").replace(" troon"," π").replace(" Troon"," π").replace(" TROON"," π") + if not v or v.slurreplacer: body = body.replace(" nigger"," π").replace(" Nigger"," π").replace(" NIGGER"," π").replace(" pedo"," libertarian").replace(" Pedo"," Libertarian ").replace(" PEDO"," LIBERTARIAN ").replace(" tranny"," π").replace(" Tranny"," π").replace(" TRANNY"," π").replace(" fag"," cute twink").replace(" Fag"," Cute twink").replace(" FAG"," CUTE TWINK").replace(" faggot"," cute twink").replace(" Faggot"," Cute twink").replace(" FAGGOT"," CUTE TWINK").replace(" steve akins"," penny verity oaken").replace(" Steve Akins"," Penny Verity Oaken").replace(" STEVE AKINS"," PENNY VERITY OAKEN").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" kill yourself"," keep yourself safe").replace(" KILL YOURSELF"," KEEP YOURSELF SAFE").replace(" trannie"," π").replace(" Trannie"," π").replace(" TRANNIE"," π").replace(" troon"," π").replace(" Troon"," π").replace(" TROON"," π") if v and not v.oldreddit: body = body.replace("old.reddit.com", "reddit.com") return body @@ -357,7 +357,7 @@ class Submission(Base, Stndrd, Age_times, Scores, Fuzzing): def realtitle(self, v): if self.title_html: title = self.title_html else: title = self.title - if not v or v.slurreplacer: title = title.replace(" nigger"," π").replace(" Nigger"," π").replace(" NIGGER"," π").replace(" pedo"," libertarian").replace(" Pedo"," Libertarian ").replace(" PEDO"," LIBERTARIAN ").replace(" tranny"," π").replace(" Tranny"," π").replace(" TRANNY"," π").replace(" fag"," cute twink").replace(" Fag"," Cute twink").replace(" FAG"," CUTE TWINK").replace(" faggot"," cute twink").replace(" Faggot"," Cute twink").replace(" FAGGOT"," CUTE TWINK").replace(" trump"," DDR").replace(" Trump"," DDR").replace(" TRUMP"," DDR").replace(" biden"," DDD").replace(" Biden"," DDD").replace(" BIDEN"," DDD").replace(" steve akins"," penny verity oaken").replace(" Steve Akins"," Penny Verity Oaken").replace(" STEVE AKINS"," PENNY VERITY OAKEN").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" kill yourself"," keep yourself safe").replace(" KILL YOURSELF"," KEEP YOURSELF SAFE").replace(" trannie"," π").replace(" Trannie"," π").replace(" TRANNIE"," π").replace(" troon"," π").replace(" Troon"," π").replace(" TROON"," π") + if not v or v.slurreplacer: title = title.replace(" nigger"," π").replace(" Nigger"," π").replace(" NIGGER"," π").replace(" pedo"," libertarian").replace(" Pedo"," Libertarian ").replace(" PEDO"," LIBERTARIAN ").replace(" tranny"," π").replace(" Tranny"," π").replace(" TRANNY"," π").replace(" fag"," cute twink").replace(" Fag"," Cute twink").replace(" FAG"," CUTE TWINK").replace(" faggot"," cute twink").replace(" Faggot"," Cute twink").replace(" FAGGOT"," CUTE TWINK").replace(" steve akins"," penny verity oaken").replace(" Steve Akins"," Penny Verity Oaken").replace(" STEVE AKINS"," PENNY VERITY OAKEN").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" RETARD"," RSLUR").replace(" rapist"," male feminist").replace(" Rapist"," Male feminist").replace(" RAPIST"," MALE FEMINIST").replace(" kill yourself"," keep yourself safe").replace(" KILL YOURSELF"," KEEP YOURSELF SAFE").replace(" trannie"," π").replace(" Trannie"," π").replace(" TRANNIE"," π").replace(" troon"," π").replace(" Troon"," π").replace(" TROON"," π") return title @property diff --git a/files/classes/user.py b/files/classes/user.py index 050666f91..66db26632 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -16,18 +16,19 @@ from files.__main__ import Base, cache from files.helpers.security import * site = environ.get("DOMAIN").strip() - +defaulttheme = environ.get("DEFAULT_COLOR").strip() +defaultcolor = environ.get("DEFAULT_COLOR").strip() class User(Base, Stndrd, Age_times): __tablename__ = "users" id = Column(Integer, primary_key=True) username = Column(String) - namecolor = Column(String, default='ff66ac') + namecolor = Column(String, default=defaultcolor) background = Column(String) customtitle = Column(String) customtitleplain = Column(String) - titlecolor = Column(String, default='ff66ac') - theme = Column(String, default='dark') - themecolor = Column(String, default='ff66ac') + titlecolor = Column(String, default=defaultcolor) + theme = Column(String, default=defaulttheme) + themecolor = Column(String, default=defaultcolor) song = Column(String) highres = Column(String) profileurl = Column(String) diff --git a/files/routes/comments.py b/files/routes/comments.py index 69051b608..4661c1d9e 100644 --- a/files/routes/comments.py +++ b/files/routes/comments.py @@ -158,7 +158,7 @@ def api_comment(v): if not body and not request.files.get('file'): return {"error":"You need to actually write something!"}, 400 - for i in re.finditer('^(https:\/\/.*\.(png|jpg|jpeg|gif|PNG|JPG|JPEG|GIF))', body, re.MULTILINE): body = body.replace(i.group(1), f'![]({i.group(1)})') + for i in re.finditer('^(https:\/\/.*\.(png|jpg|jpeg|gif|PNG|JPG|JPEG|GIF|?maxwidth=9999))', body, re.MULTILINE): body = body.replace(i.group(1), f'![]({i.group(1)})') body = body.replace("\n", "\n\n").replace("\n\n\n\n\n\n", "\n\n").replace("\n\n\n\n", "\n\n").replace("\n\n\n", "\n\n") with CustomRenderer(post_id=parent_id) as renderer: body_md = renderer.render(mistletoe.Document(body)) body_html = sanitize(body_md, linkgen=True) @@ -535,7 +535,7 @@ def edit_comment(cid, v): if c.is_banned or c.deleted_utc > 0: abort(403) body = request.form.get("body", "")[:10000] - for i in re.finditer('^(https:\/\/.*\.(png|jpg|jpeg|gif|PNG|JPG|JPEG|GIF))', body, re.MULTILINE): body = body.replace(i.group(1), f'![]({i.group(1)})') + for i in re.finditer('^(https:\/\/.*\.(png|jpg|jpeg|gif|PNG|JPG|JPEG|GIF|?maxwidth=9999))', body, re.MULTILINE): body = body.replace(i.group(1), f'![]({i.group(1)})') body = body.replace("\n", "\n\n").replace("\n\n\n\n\n\n", "\n\n").replace("\n\n\n\n", "\n\n").replace("\n\n\n", "\n\n") with CustomRenderer(post_id=c.post.id) as renderer: body_md = renderer.render(mistletoe.Document(body)) body_html = sanitize(body_md, linkgen=True) diff --git a/files/routes/posts.py b/files/routes/posts.py index 977625c5d..718981975 100644 --- a/files/routes/posts.py +++ b/files/routes/posts.py @@ -236,7 +236,7 @@ def edit_post(pid, v): abort(403) body = request.form.get("body", "") - for i in re.finditer('^(https:\/\/.*\.(png|jpg|jpeg|gif|PNG|JPG|JPEG|GIF))', body, re.MULTILINE): body = body.replace(i.group(1), f'![]({i.group(1)})') + for i in re.finditer('^(https:\/\/.*\.(png|jpg|jpeg|gif|PNG|JPG|JPEG|GIF|?maxwidth=9999))', body, re.MULTILINE): body = body.replace(i.group(1), f'![]({i.group(1)})') with CustomRenderer() as renderer: body_md = renderer.render(mistletoe.Document(body)) body_html = sanitize(body_md, linkgen=True) @@ -707,7 +707,7 @@ def submit_post(v): else: return render_template("submit.html", v=v, error="2048 character limit for URLs.", title=title, url=url,body=request.form.get("body", "")), 400 # render text - for i in re.finditer('^(https:\/\/.*\.(png|jpg|jpeg|gif|PNG|JPG|JPEG|GIF))', body, re.MULTILINE): body = body.replace(i.group(1), f'![]({i.group(1)})') + for i in re.finditer('^(https:\/\/.*\.(png|jpg|jpeg|gif|PNG|JPG|JPEG|GIF|?maxwidth=9999))', body, re.MULTILINE): body = body.replace(i.group(1), f'![]({i.group(1)})') with CustomRenderer() as renderer: body_md = renderer.render(mistletoe.Document(body)) body_html = sanitize(body_md, linkgen=True) diff --git a/files/routes/settings.py b/files/routes/settings.py index 538ea6663..caecc8239 100644 --- a/files/routes/settings.py +++ b/files/routes/settings.py @@ -76,7 +76,7 @@ def settings_profile_post(v): v=v, error="You didn't change anything") - for i in re.finditer('^(https:\/\/.*\.(png|jpg|jpeg|gif|PNG|JPG|JPEG|GIF))', bio, re.MULTILINE): bio = bio.replace(i.group(1), f'![]({i.group(1)})') + for i in re.finditer('^(https:\/\/.*\.(png|jpg|jpeg|gif|PNG|JPG|JPEG|GIF|?maxwidth=9999))', bio, re.MULTILINE): bio = bio.replace(i.group(1), f'![]({i.group(1)})') bio = bio.replace("\n", "\n\n").replace("\n\n\n\n\n\n", "\n\n").replace("\n\n\n\n", "\n\n").replace("\n\n\n", "\n\n") with CustomRenderer() as renderer: bio_html = renderer.render(mistletoe.Document(bio)) bio_html = sanitize(bio_html, linkgen=True) diff --git a/files/routes/static.py b/files/routes/static.py index 044008820..b0ae3f9a9 100644 --- a/files/routes/static.py +++ b/files/routes/static.py @@ -97,7 +97,7 @@ def index(): @app.get("/assets/favicon.ico") def favicon(): - return send_file("./assets/images/favicon.png") + return send_file(f"./assets/images/{site}/favicon.png") @app.get("/api") @auth_desired diff --git a/files/routes/votes.py b/files/routes/votes.py index 0f39ae239..c2fb49e1d 100644 --- a/files/routes/votes.py +++ b/files/routes/votes.py @@ -71,6 +71,8 @@ def api_vote_post(post_id, new, v): # check for existing vote existing = g.db.query(Vote).filter_by(user_id=v.id, submission_id=post.id).first() + if existing.vote_type == new: return "", 204 + if existing: if existing.vote_type == 0 and new != 0: post.author.coins += 1 @@ -119,6 +121,8 @@ def api_vote_comment(comment_id, new, v): # check for existing vote existing = g.db.query(CommentVote).filter_by(user_id=v.id, comment_id=comment.id).first() + if existing.vote_type == new: return "", 204 + if existing: if existing.vote_type == 0 and new != 0: comment.author.coins += 1 @@ -145,4 +149,4 @@ def api_vote_comment(comment_id, new, v): comment.upvotes = g.db.query(CommentVote).filter_by(comment_id=comment.id, vote_type=1).count() comment.downvotes = g.db.query(CommentVote).filter_by(comment_id=comment.id, vote_type=-1).count() g.db.add(comment) - return make_response(""), 204 \ No newline at end of file + return "", 204 \ No newline at end of file diff --git a/files/templates/2fa_modal.html b/files/templates/2fa_modal.html index dd6a99a62..669eac2a4 100644 --- a/files/templates/2fa_modal.html +++ b/files/templates/2fa_modal.html @@ -24,7 +24,7 @@
- Step 2: Enter the six-digit code generated in the authenticator app and your {{"SITE_NAME" | app_config}} account password. + Step 2: Enter the six-digit code generated in the authenticator app and your {{'SITE_NAME' | app_config}} account password.
@@ -47,7 +47,7 @@-The OAuth2 authorization flow is used to enable users to authorize third-party applications to access their {{"SITE_NAME" | app_config}} account without having to provide their login information to the application. +The OAuth2 authorization flow is used to enable users to authorize third-party applications to access their {{'SITE_NAME' | app_config}} account without having to provide their login information to the application. This page explains how to obtain API application keys, how to prompt a user for authorization, and how to obtain and use access tokens. ## Step 1: Create your Application -In the [apps tab of {{"SITE_NAME" | app_config}} settings](/settings/apps), fill in and submit the form to request new API keys. You will need: +In the [apps tab of {{'SITE_NAME' | app_config}} settings](/settings/apps), fill in and submit the form to request new API keys. You will need: * an application name * a Redirect URI. May not use HTTP unless using localhost (use HTTPS instead). @@ -87,7 +87,7 @@ In the [apps tab of {{"SITE_NAME" | app_config}} settings](/settings/apps), fill Don't worry too much about accuracy; you will be able to change all of these later. -{{"SITE_NAME" | app_config}} administrators will review and approve or deny your request for API keys. You'll know when your request has been approved when you get a private message with an access token tied to your account. +{{'SITE_NAME' | app_config}} administrators will review and approve or deny your request for API keys. You'll know when your request has been approved when you get a private message with an access token tied to your account. DO NOT reveal your Client ID or Access Token. Anyone with these information will be able to pretend to be you. You are responsible for keeping them a secret! @@ -95,15 +95,15 @@ DO NOT reveal your Client ID or Access Token. Anyone with these information will Send your user to `{{request.host_url}}authorize/?client_id=YOUR_CLIENT_ID` -If done correctly, the user will see that your application wants to access their {{"SITE_NAME" | app_config}} account, and be prompted to approve or deny the request. +If done correctly, the user will see that your application wants to access their {{'SITE_NAME' | app_config}} account, and be prompted to approve or deny the request. ## Step 3: Catch the redirect -The user clicks "Authorize". {{"SITE_NAME" | app_config}} will redirect the user's browser to GET the designated redirect URI. The access token URL parameter will be included in the redirect, which your server should process. +The user clicks "Authorize". {{'SITE_NAME' | app_config}} will redirect the user's browser to GET the designated redirect URI. The access token URL parameter will be included in the redirect, which your server should process. ## Step 4: Using the Access Token -To use the access token, include the following header in subsequent API requests to {{"SITE_NAME" | app_config}}: `Authorization: access_token_goes_here` +To use the access token, include the following header in subsequent API requests to {{'SITE_NAME' | app_config}}: `Authorization: access_token_goes_here` Python example: diff --git a/files/templates/authforms.html b/files/templates/authforms.html index 3a19f3da5..95a1683d0 100644 --- a/files/templates/authforms.html +++ b/files/templates/authforms.html @@ -5,10 +5,10 @@ - + -
Please note that {{"SITE_NAME" | app_config}} will never ask you for your email, password, or two-factor token via email, text, or phone.
+Please note that {{'SITE_NAME' | app_config}} will never ask you for your email, password, or two-factor token via email, text, or phone.
diff --git a/files/templates/email/default.html b/files/templates/email/default.html
index ca3c5bf0a..6aef9ce38 100644
--- a/files/templates/email/default.html
+++ b/files/templates/email/default.html
@@ -433,7 +433,7 @@
- {% block preheader %}Thanks for joining {{"SITE_NAME" | app_config}}! Please take a sec to verify the email you used to sign up.{% endblock %}
+ {% block preheader %}Thanks for joining {{'SITE_NAME' | app_config}}! Please take a sec to verify the email you used to sign up.{% endblock %}
Please note that {{"SITE_NAME" | app_config}} will never ask you for your email, password, or two-factor token via email, text, or phone. +Please note that {{'SITE_NAME' | app_config}} will never ask you for your email, password, or two-factor token via email, text, or phone.
|