mirror of
https://github.com/nexy7574/LCC-bot.git
synced 2024-09-19 18:16:34 +01:00
redirect nicerly
This commit is contained in:
parent
cd6c789541
commit
69f2ab1895
3 changed files with 36 additions and 11 deletions
|
@ -27,4 +27,4 @@ RUN pip install -r requirements.txt
|
||||||
|
|
||||||
COPY . /
|
COPY . /
|
||||||
|
|
||||||
CMD ["python", "main.py"]
|
CMD ["python3", "main.py"]
|
||||||
|
|
2
main.py
2
main.py
|
@ -68,7 +68,7 @@ async def ping(ctx: discord.ApplicationContext):
|
||||||
|
|
||||||
@bot.check_once
|
@bot.check_once
|
||||||
async def check_not_banned(ctx: discord.ApplicationContext | commands.Context):
|
async def check_not_banned(ctx: discord.ApplicationContext | commands.Context):
|
||||||
if await bot.is_owner(ctx.author):
|
if await bot.is_owner(ctx.author) or ctx.command.name in ("block", "unblock"):
|
||||||
return True
|
return True
|
||||||
user = ctx.author
|
user = ctx.author
|
||||||
ban: JimmyBans = await get_or_none(JimmyBans, user_id=user.id)
|
ban: JimmyBans = await get_or_none(JimmyBans, user_id=user.id)
|
||||||
|
|
|
@ -5,7 +5,7 @@ from datetime import datetime, timezone
|
||||||
from hashlib import sha512
|
from hashlib import sha512
|
||||||
|
|
||||||
from fastapi import FastAPI, HTTPException, Request
|
from fastapi import FastAPI, HTTPException, Request
|
||||||
from fastapi.responses import JSONResponse, RedirectResponse
|
from fastapi.responses import JSONResponse, RedirectResponse, HTMLResponse
|
||||||
from utils import Student, get_or_none, VerifyCode, console, BannedStudentID
|
from utils import Student, get_or_none, VerifyCode, console, BannedStudentID
|
||||||
from config import guilds
|
from config import guilds
|
||||||
|
|
||||||
|
@ -35,7 +35,10 @@ async def check_bot_instanced(request, call_next):
|
||||||
if not request.app.state.bot:
|
if not request.app.state.bot:
|
||||||
return JSONResponse(
|
return JSONResponse(
|
||||||
status_code=503,
|
status_code=503,
|
||||||
content={"message": "Not ready."}
|
content={"message": "Not ready."},
|
||||||
|
headers={
|
||||||
|
"Retry-After": "10"
|
||||||
|
}
|
||||||
)
|
)
|
||||||
return await call_next(request)
|
return await call_next(request)
|
||||||
|
|
||||||
|
@ -55,12 +58,12 @@ def ping():
|
||||||
async def authenticate(req: Request, code: str = None, state: str = None):
|
async def authenticate(req: Request, code: str = None, state: str = None):
|
||||||
if not OAUTH_ENABLED:
|
if not OAUTH_ENABLED:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
503,
|
501,
|
||||||
"OAuth is not enabled."
|
"OAuth is not enabled."
|
||||||
)
|
)
|
||||||
|
|
||||||
if not (code and state) or state not in app.state.states:
|
if not (code and state) or state not in app.state.states:
|
||||||
value = os.urandom(3).hex()
|
value = os.urandom(8).hex()
|
||||||
assert value not in app.state.states, "Generated a state that already exists."
|
assert value not in app.state.states, "Generated a state that already exists."
|
||||||
app.state.states.add(value)
|
app.state.states.add(value)
|
||||||
return RedirectResponse(
|
return RedirectResponse(
|
||||||
|
@ -69,7 +72,10 @@ async def authenticate(req: Request, code: str = None, state: str = None):
|
||||||
redirect_uri=OAUTH_REDIRECT_URI,
|
redirect_uri=OAUTH_REDIRECT_URI,
|
||||||
scopes=('identify',)
|
scopes=('identify',)
|
||||||
) + f"&state={value}&prompt=none",
|
) + f"&state={value}&prompt=none",
|
||||||
status_code=301
|
status_code=301,
|
||||||
|
headers={
|
||||||
|
"Cache-Control": "no-store, no-cache"
|
||||||
|
}
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
app.state.states.discard(state)
|
app.state.states.discard(state)
|
||||||
|
@ -139,12 +145,31 @@ async def authenticate(req: Request, code: str = None, state: str = None):
|
||||||
|
|
||||||
# Now we can update the student entry with this data
|
# Now we can update the student entry with this data
|
||||||
await student.update(ip_info=data, access_token_hash=token)
|
await student.update(ip_info=data, access_token_hash=token)
|
||||||
|
document = \
|
||||||
|
f"""
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Redirecting...</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
window.location.href = "{GENERAL}";
|
||||||
|
</script>
|
||||||
|
<noscript>
|
||||||
|
<meta http-equiv="refresh" content="0; url={GENERAL}" />
|
||||||
|
</noscript>
|
||||||
|
<p>Redirecting you to the general channel...</p>
|
||||||
|
<i><a href='{GENERAL}' rel='noopener'>Click here if you are not redirected.</a></i>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"""
|
||||||
# And set it as a cookie
|
# And set it as a cookie
|
||||||
response = RedirectResponse(
|
response = HTMLResponse(
|
||||||
GENERAL,
|
document,
|
||||||
status_code=307,
|
status_code=200,
|
||||||
headers={
|
headers={
|
||||||
|
"Location": GENERAL,
|
||||||
"Cache-Control": "max-age=604800"
|
"Cache-Control": "max-age=604800"
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue