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 @property
@lazy @lazy
def target_link(self): def target_link(self):
if self.target_user: if self.target_user: return f'<a href="{self.target_user.url}">{self.target_user.username}</a>'
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_post: elif self.target_comment: return f'<a href="{self.target_comment.permalink}">comment</a>'
return f'<a href="{self.target_post.permalink}">{self.target_post.title}</a>' else: return ""
elif self.target_comment:
return f'<a href="{self.target_comment.permalink}">comment</a>'
else:
return ""
@property @property
@lazy @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 from secrets import token_hex
import pyotp import pyotp
from files.helpers.discord import remove_user from files.helpers.discord import remove_user
from files.helpers.images import * from files.helpers.images import *
from files.helpers.const 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 .get import *
from .alerts import send_notification from .alerts import send_notification
from files.__main__ import app
from files.helpers.const import * 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 from sqlalchemy.orm import lazyload
import imagehash import imagehash
from os import remove from os import remove
from os.path import exists
from PIL import Image as IMAGE from PIL import Image as IMAGE
from files.helpers.wrappers import * from files.helpers.wrappers import *

View File

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

View File

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

View File

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