fsfs
This commit is contained in:
parent
b471a16e56
commit
f11aa6df76
9 changed files with 106 additions and 126 deletions
|
@ -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
|
||||||
|
|
|
@ -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 *
|
||||||
|
|
|
@ -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 *
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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.")
|
||||||
|
|
|
@ -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.")
|
|
|
@ -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 *
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 *
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue