Compare commits
2
Commits
cb01e1bcf0
...
a603566235
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a603566235 | ||
|
|
42e2fbcdb5 |
No files matched your search
@@ -5,14 +5,20 @@ from sqlmodel import Session, select
|
|||||||
|
|
||||||
from loon.web.db import engine
|
from loon.web.db import engine
|
||||||
from loon.web.users.models import User
|
from loon.web.users.models import User
|
||||||
from loon.web.utils.password import hash_password
|
|
||||||
|
|
||||||
|
|
||||||
async def change_password_handler(client, userdata, msg, data):
|
async def change_password_handler(client, userdata, msg, data):
|
||||||
if msg.topic != "loon/register/change_password":
|
prefix = "loon/auth/register/"
|
||||||
|
|
||||||
|
if not msg.topic.startswith(prefix):
|
||||||
|
return
|
||||||
|
|
||||||
|
rest = msg.topic[len(prefix):]
|
||||||
|
uuid, _, subtopic = rest.partition("/")
|
||||||
|
|
||||||
|
if not uuid or subtopic != "change_password":
|
||||||
return
|
return
|
||||||
|
|
||||||
uuid = data["uuid"]
|
|
||||||
password = data["password"]
|
password = data["password"]
|
||||||
|
|
||||||
with Session(engine) as session:
|
with Session(engine) as session:
|
||||||
@@ -20,22 +26,22 @@ async def change_password_handler(client, userdata, msg, data):
|
|||||||
user = session.exec(statement).first()
|
user = session.exec(statement).first()
|
||||||
|
|
||||||
if user is None:
|
if user is None:
|
||||||
client.publish(f"loon/register/{uuid}/response",
|
client.publish(f"loon/auth/register/{uuid}/response",
|
||||||
json.dumps({"success": False, "error": "The user is not registered!"}))
|
json.dumps({"success": False, "error": "The user is not registered!"}))
|
||||||
return
|
return
|
||||||
|
|
||||||
user = session.exec(
|
user = session.exec(
|
||||||
select(User).where(User.uuid == uuid)
|
select(User).where(User.uuid == uuid)
|
||||||
).first()
|
).first()
|
||||||
user.password = hash_password(password)
|
user.password = password
|
||||||
|
|
||||||
try:
|
try:
|
||||||
session.commit()
|
session.commit()
|
||||||
except IntegrityError:
|
except IntegrityError:
|
||||||
session.rollback()
|
session.rollback()
|
||||||
client.publish(f"loon/register/{uuid}/response",
|
client.publish(f"loon/auth/register/{uuid}/response",
|
||||||
json.dumps({"success": False, "error": "The user is not registered!"}))
|
json.dumps({"success": False, "error": "The user is not registered!"}))
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
client.publish(f"loon/register/{uuid}/response", json.dumps({"success": True, "error": None}))
|
client.publish(f"loon/auth/register/{uuid}/response", json.dumps({"success": True, "error": None}))
|
||||||
@@ -5,14 +5,20 @@ from sqlmodel import Session, select
|
|||||||
|
|
||||||
from loon.web.db import engine
|
from loon.web.db import engine
|
||||||
from loon.web.users.models import User
|
from loon.web.users.models import User
|
||||||
from loon.web.utils.password import hash_password
|
|
||||||
|
|
||||||
|
|
||||||
async def register_request_handler(client, userdata, msg, data):
|
async def register_request_handler(client, userdata, msg, data):
|
||||||
if msg.topic != "loon/register/request":
|
prefix = "loon/auth/register/"
|
||||||
|
|
||||||
|
if not msg.topic.startswith(prefix):
|
||||||
|
return
|
||||||
|
|
||||||
|
rest = msg.topic[len(prefix):]
|
||||||
|
uuid, _, subtopic = rest.partition("/")
|
||||||
|
|
||||||
|
if not uuid or subtopic != "request":
|
||||||
return
|
return
|
||||||
|
|
||||||
uuid = data["uuid"]
|
|
||||||
password = data["password"]
|
password = data["password"]
|
||||||
internal_username = data["internalUsername"]
|
internal_username = data["internalUsername"]
|
||||||
|
|
||||||
@@ -21,7 +27,7 @@ async def register_request_handler(client, userdata, msg, data):
|
|||||||
user = session.exec(statement).first()
|
user = session.exec(statement).first()
|
||||||
|
|
||||||
if user is not None:
|
if user is not None:
|
||||||
client.publish(f"loon/register/{uuid}/response",
|
client.publish(f"loon/auth/register/{uuid}/response",
|
||||||
json.dumps({"success": False, "error": "The user is already registered!"}))
|
json.dumps({"success": False, "error": "The user is already registered!"}))
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -29,19 +35,19 @@ async def register_request_handler(client, userdata, msg, data):
|
|||||||
user = session.exec(statement).first()
|
user = session.exec(statement).first()
|
||||||
|
|
||||||
if user is not None:
|
if user is not None:
|
||||||
client.publish(f"loon/register/{uuid}/response",
|
client.publish(f"loon/auth/register/{uuid}/response",
|
||||||
json.dumps({"success": False, "error": f"The {internal_username} is taken!"}))
|
json.dumps({"success": False, "error": f"The {internal_username} is taken!"}))
|
||||||
return
|
return
|
||||||
|
|
||||||
user = User(uuid=uuid, password=hash_password(password), internal_username=internal_username, admin=False)
|
user = User(uuid=uuid, password=password, internal_username=internal_username, admin=False)
|
||||||
session.add(user)
|
session.add(user)
|
||||||
try:
|
try:
|
||||||
session.commit()
|
session.commit()
|
||||||
except IntegrityError:
|
except IntegrityError:
|
||||||
session.rollback()
|
session.rollback()
|
||||||
client.publish(f"loon/register/{uuid}/response",
|
client.publish(f"loon/auth/register/{uuid}/response",
|
||||||
json.dumps({"success": False, "error": "The user is already registered!"}))
|
json.dumps({"success": False, "error": "The user is already registered!"}))
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
client.publish(f"loon/register/{uuid}/response", json.dumps({"success": True, "error": None}))
|
client.publish(f"loon/auth/register/{uuid}/response", json.dumps({"success": True, "error": None}))
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
import json
|
||||||
|
|
||||||
|
from sqlmodel import Session, select
|
||||||
|
|
||||||
|
from loon.web.db import engine
|
||||||
|
from loon.web.users.models import User
|
||||||
|
|
||||||
|
|
||||||
|
async def show_username_handler(client, userdata, msg, data):
|
||||||
|
prefix = "loon/auth/show_username/"
|
||||||
|
|
||||||
|
if not msg.topic.startswith(prefix):
|
||||||
|
return
|
||||||
|
|
||||||
|
rest = msg.topic[len(prefix):]
|
||||||
|
uuid, _, subtopic = rest.partition("/")
|
||||||
|
|
||||||
|
if not uuid or subtopic:
|
||||||
|
return
|
||||||
|
|
||||||
|
with Session(engine) as session:
|
||||||
|
user = session.exec(select(User).where(User.uuid == uuid)).first()
|
||||||
|
|
||||||
|
if user is None:
|
||||||
|
client.publish(f"loon/auth/show_username/{uuid}/response",
|
||||||
|
json.dumps({"success": False, "error": "The user is not registered!"}))
|
||||||
|
return
|
||||||
|
|
||||||
|
internal_username = user.internal_username
|
||||||
|
|
||||||
|
client.publish(f"loon/auth/show_username/{uuid}/response",
|
||||||
|
json.dumps({"success": True, "error": None, "internalUsername": internal_username}))
|
||||||
@@ -11,11 +11,12 @@ from loon.mqtt.handlers.marquee import marquee_handler
|
|||||||
from loon.mqtt.handlers.player import player_handler
|
from loon.mqtt.handlers.player import player_handler
|
||||||
from loon.mqtt.handlers.register_request import register_request_handler
|
from loon.mqtt.handlers.register_request import register_request_handler
|
||||||
from loon.mqtt.handlers.server import server_handler
|
from loon.mqtt.handlers.server import server_handler
|
||||||
|
from loon.mqtt.handlers.show_username_request import show_username_handler
|
||||||
from loon.mqtt.handlers.world import world_handler
|
from loon.mqtt.handlers.world import world_handler
|
||||||
|
|
||||||
|
|
||||||
class MQTTManager:
|
class MQTTManager:
|
||||||
BASE_HANDLERS = [player_handler, register_request_handler, world_handler, server_handler, marquee_handler, change_password_handler]
|
BASE_HANDLERS = [player_handler, register_request_handler, world_handler, server_handler, marquee_handler, change_password_handler, show_username_handler]
|
||||||
|
|
||||||
def __init__(self, inject_handlers = None):
|
def __init__(self, inject_handlers = None):
|
||||||
if inject_handlers is None:
|
if inject_handlers is None:
|
||||||
@@ -59,7 +60,8 @@ class MQTTManager:
|
|||||||
def on_topic(self, client, userdata, msg):
|
def on_topic(self, client, userdata, msg):
|
||||||
async def handle_message():
|
async def handle_message():
|
||||||
try:
|
try:
|
||||||
data = json.loads(msg.payload.decode())
|
raw = msg.payload.decode()
|
||||||
|
data = json.loads(raw) if raw.strip() else {}
|
||||||
except json.decoder.JSONDecodeError:
|
except json.decoder.JSONDecodeError:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -2,14 +2,6 @@ from argon2 import PasswordHasher
|
|||||||
from argon2.exceptions import InvalidHashError, VerifyMismatchError
|
from argon2.exceptions import InvalidHashError, VerifyMismatchError
|
||||||
|
|
||||||
|
|
||||||
def hash_password(password: str) -> str:
|
|
||||||
ph = PasswordHasher()
|
|
||||||
|
|
||||||
hashed = ph.hash(password)
|
|
||||||
|
|
||||||
return str(hashed)
|
|
||||||
|
|
||||||
|
|
||||||
def verify_password(password: str, hashed_password: str) -> bool:
|
def verify_password(password: str, hashed_password: str) -> bool:
|
||||||
ph = PasswordHasher()
|
ph = PasswordHasher()
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user