remotes/1693045480750635534/spooky-22
Aevann1 2021-09-19 20:38:24 +02:00
parent cf4b9dcbf3
commit 5e716cac7c
9 changed files with 106 additions and 126 deletions

View File

@ -99,14 +99,10 @@ class ModAction(Base):
@property
@lazy
def target_link(self):
if self.target_user:
return f'<a href="{self.target_user.url}">{self.target_user.username}</a>'
elif self.target_post:
return f'<a href="{self.target_post.permalink}">{self.target_post.title}</a>'
elif self.target_comment:
return f'<a href="{self.target_comment.permalink}">comment</a>'
else:
return ""
if self.target_user: return f'<a href="{self.target_user.url}">{self.target_user.username}</a>'
elif self.target_post: return f'<a href="{self.target_post.permalink}">{self.target_post.title.replace("<","").replace(">","")}</a>'
elif self.target_comment: return f'<a href="{self.target_comment.permalink}">comment</a>'
else: return ""
@property
@lazy

View File

@ -1,7 +1,6 @@
from sqlalchemy.orm import deferred, contains_eager, aliased
from sqlalchemy.orm import deferred, aliased
from secrets import token_hex
import pyotp
from files.helpers.discord import remove_user
from files.helpers.images import *
from files.helpers.const import *

View File

@ -1,9 +1,5 @@
from random import vonmisesvariate
from sqlalchemy.sql import visitors
from werkzeug.wrappers.response import Response as RespObj
from .get import *
from .alerts import send_notification
from files.__main__ import app
from files.helpers.const import *

View File

@ -1 +1,101 @@
from .mail import *
from os import environ
import requests
import time
from flask import *
from urllib.parse import quote
from files.helpers.security import *
from files.helpers.wrappers import *
from files.classes import *
from files.__main__ import app
site = environ.get("DOMAIN").strip()
name = environ.get("SITE_NAME").strip()
mailgun_domain = environ.get("MAILGUN_DOMAIN", "").strip()
def send_mail(to_address, subject, html, plaintext=None, files={},
from_address=f"{name} <noreply@mail.{site}>"):
url = f"https://api.mailgun.net/v3/{mailgun_domain}/messages"
data = {"from": from_address,
"to": [to_address],
"subject": subject,
"text": plaintext,
"html": html,
}
return requests.post(url,
auth=(
"api", environ.get("MAILGUN_KEY").strip()),
data=data,
files=[("attachment", (k, files[k])) for k in files]
)
def send_verification_email(user, email=None):
if not email:
email = user.email
url = f"https://{app.config['SERVER_NAME']}/activate"
now = int(time.time())
token = generate_hash(f"{email}+{user.id}+{now}")
params = f"?email={quote(email)}&id={user.id}&time={now}&token={token}"
link = url + params
send_mail(to_address=email,
html=render_template("email/email_verify.html",
action_url=link,
v=user),
subject=f"Validate your {name} account email."
)
@app.post("/verify_email")
@auth_required
def api_verify_email(v):
send_verification_email(v)
return {"message": "Email has been sent (ETA ~5 minutes)"}
@app.get("/activate")
@auth_desired
def activate(v):
email = request.values.get("email", "")
id = request.values.get("id", "")
timestamp = int(request.values.get("time", "0"))
token = request.values.get("token", "")
if int(time.time()) - timestamp > 3600:
return render_template("message.html", v=v, title="Verification link expired.",
message="That link has expired. Visit your settings to send yourself another verification email."), 410
if not validate_hash(f"{email}+{id}+{timestamp}", token):
abort(403)
user = g.db.query(User).options(lazyload('*')).filter_by(id=id).first()
if not user:
abort(404)
if user.is_activated and user.email == email:
return render_template("message_success.html", v=v,
title="Email already verified.", message="Email already verified."), 404
user.email = email
user.is_activated = True
if not any([b.badge_id == 2 for b in user.badges]):
mail_badge = Badge(user_id=user.id,
badge_id=2)
g.db.add(mail_badge)
g.db.add(user)
g.db.commit()
return render_template("message_success.html", v=v, title="Email verified.", message=f"Your email {email} has been verified. Thank you.")

View File

@ -1,101 +0,0 @@
from os import environ
import requests
import time
from flask import *
from urllib.parse import quote
from files.helpers.security import *
from files.helpers.wrappers import *
from files.classes import *
from files.__main__ import app
site = environ.get("DOMAIN").strip()
name = environ.get("SITE_NAME").strip()
mailgun_domain = environ.get("MAILGUN_DOMAIN", "").strip()
def send_mail(to_address, subject, html, plaintext=None, files={},
from_address=f"{name} <noreply@mail.{site}>"):
url = f"https://api.mailgun.net/v3/{mailgun_domain}/messages"
data = {"from": from_address,
"to": [to_address],
"subject": subject,
"text": plaintext,
"html": html,
}
return requests.post(url,
auth=(
"api", environ.get("MAILGUN_KEY").strip()),
data=data,
files=[("attachment", (k, files[k])) for k in files]
)
def send_verification_email(user, email=None):
if not email:
email = user.email
url = f"https://{app.config['SERVER_NAME']}/activate"
now = int(time.time())
token = generate_hash(f"{email}+{user.id}+{now}")
params = f"?email={quote(email)}&id={user.id}&time={now}&token={token}"
link = url + params
send_mail(to_address=email,
html=render_template("email/email_verify.html",
action_url=link,
v=user),
subject=f"Validate your {name} account email."
)
@app.post("/verify_email")
@auth_required
def api_verify_email(v):
send_verification_email(v)
return {"message": "Email has been sent (ETA ~5 minutes)"}
@app.get("/activate")
@auth_desired
def activate(v):
email = request.values.get("email", "")
id = request.values.get("id", "")
timestamp = int(request.values.get("time", "0"))
token = request.values.get("token", "")
if int(time.time()) - timestamp > 3600:
return render_template("message.html", v=v, title="Verification link expired.",
message="That link has expired. Visit your settings to send yourself another verification email."), 410
if not validate_hash(f"{email}+{id}+{timestamp}", token):
abort(403)
user = g.db.query(User).options(lazyload('*')).filter_by(id=id).first()
if not user:
abort(404)
if user.is_activated and user.email == email:
return render_template("message_success.html", v=v,
title="Email already verified.", message="Email already verified."), 404
user.email = email
user.is_activated = True
if not any([b.badge_id == 2 for b in user.badges]):
mail_badge = Badge(user_id=user.id,
badge_id=2)
g.db.add(mail_badge)
g.db.add(user)
g.db.commit()
return render_template("message_success.html", v=v, title="Email verified.", message=f"Your email {email} has been verified. Thank you.")

View File

@ -3,7 +3,6 @@ import calendar
from sqlalchemy.orm import lazyload
import imagehash
from os import remove
from os.path import exists
from PIL import Image as IMAGE
from files.helpers.wrappers import *

View File

@ -1,6 +1,3 @@
import traceback
import sys
from files.helpers.wrappers import *
from files.helpers.filters import *
from files.helpers.alerts import *
@ -10,7 +7,6 @@ from files.helpers.const import *
from files.classes import *
from files.routes.front import comment_idlist
from pusher_push_notifications import PushNotifications
from flask import *
from files.__main__ import app, limiter

View File

@ -2,8 +2,6 @@ from files.helpers.wrappers import *
from files.helpers.get import *
from flask import g
from files.__main__ import app
from files.helpers.sanitize import sanitize
from os import path
@app.post("/flag/post/<pid>")
@auth_desired

View File

@ -1,9 +1,6 @@
import qrcode
import io
import time
import traceback
import sys
from files.classes.user import ViewerRelationship
from files.helpers.alerts import *
from files.helpers.sanitize import *