Source code for noggin.signals
import time
import requests
from blinker import ANY, Namespace
from flask import current_app, request, url_for
from noggin.utility import messaging
from noggin.utility.token import Audience, make_token
from noggin_messages import UserCreateV1
noggin_signals = Namespace()
stageuser_created = noggin_signals.signal('stageuser-created')
user_registered = noggin_signals.signal('user-registered')
[docs]
@user_registered.connect_via(ANY)
def send_registered_message(sender, **kwargs):
user = sender
messaging.publish(
UserCreateV1({"msg": {"agent": user.username, "user": user.username}})
)
[docs]
@stageuser_created.connect_via(ANY)
def request_basset_check(sender, **kwargs):
user = sender
basset_url = current_app.config.get("BASSET_URL")
if not basset_url:
return
token = make_token(
{"sub": user.username},
audience=Audience.spam_check,
ttl=current_app.config["SPAMCHECK_TOKEN_EXPIRATION"],
)
user_dict = user.as_dict()
user_dict["email"] = user_dict["mail"]
user_dict["human_name"] = user_dict["commonname"]
response = requests.post(
basset_url,
json={
"action": "fedora.noggin.registration",
"time": int(time.time()),
"data": {
"user": user_dict,
"request_headers": dict(request.headers),
"request_ip": request.remote_addr,
"token": token,
"callback": url_for('.spamcheck_hook', _external=True),
},
},
timeout=30,
)
if not response.ok:
current_app.logger.warning(
"Error requesting a Basset check: "
f"{response.status_code} {response.reason}: {response.text}"
)