Small improvements

This commit is contained in:
nsde 2023-08-30 20:55:31 +02:00
parent 947b70aae9
commit d4237dd65e
4 changed files with 43 additions and 26 deletions

View file

@ -41,6 +41,8 @@ async def handle(incoming_request: fastapi.Request):
payload = await incoming_request.json() payload = await incoming_request.json()
except json.decoder.JSONDecodeError: except json.decoder.JSONDecodeError:
payload = {} payload = {}
except UnicodeDecodeError:
payload = {}
received_key = incoming_request.headers.get('Authorization') received_key = incoming_request.headers.get('Authorization')
@ -83,29 +85,31 @@ async def handle(incoming_request: fastapi.Request):
if user['credits'] < cost: if user['credits'] < cost:
return await errors.error(429, 'Not enough credits.', 'Wait or earn more credits. Learn more on our website or Discord server.') return await errors.error(429, 'Not enough credits.', 'Wait or earn more credits. Learn more on our website or Discord server.')
payload_with_vars = json.dumps(payload)
replace_dict = { if not 'DISABLE_VARS' in key_tags:
'timestamp': str(int(time.time())), payload_with_vars = json.dumps(payload)
'date': time.strftime('%Y-%m-%d'),
'time': time.strftime('%H:%M:%S'),
'datetime': time.strftime('%Y-%m-%d %H:%M:%S'),
'model': payload.get('model', 'unknown'),
}
if 'ALLOW_INSECURE_VARS' in key_tags: replace_dict = {
replace_dict.update({ 'timestamp': str(int(time.time())),
'my.ip': ip_address, 'date': time.strftime('%Y-%m-%d'),
'my.id': str(user['_id']), 'time': time.strftime('%H:%M:%S'),
'my.role': user.get('role', 'default'), 'datetime': time.strftime('%Y-%m-%d %H:%M:%S'),
'my.credits': str(user['credits']), 'model': payload.get('model', 'unknown'),
'my.discord': user.get('auth', {}).get('discord', ''), }
})
for key, value in replace_dict.items(): if 'ALLOW_INSECURE_VARS' in key_tags:
payload_with_vars = payload_with_vars.replace(f'[[{key}]]', value) replace_dict.update({
'my.ip': ip_address,
'my.id': str(user['_id']),
'my.role': user.get('role', 'default'),
'my.credits': str(user['credits']),
'my.discord': user.get('auth', {}).get('discord', ''),
})
payload = json.loads(payload_with_vars) for key, value in replace_dict.items():
payload_with_vars = payload_with_vars.replace(f'[[{key}]]', value)
payload = json.loads(payload_with_vars)
policy_violation = False policy_violation = False
if '/moderations' not in path: if '/moderations' not in path:

View file

@ -1,4 +1,9 @@
import asyncio import os
import time
from dotenv import load_dotenv
load_dotenv()
async def get_ip(request) -> str: async def get_ip(request) -> str:
"""Get the IP address of the incoming request.""" """Get the IP address of the incoming request."""
@ -17,7 +22,7 @@ async def get_ip(request) -> str:
return detected_ip return detected_ip
def get_ip_sync(request) -> str: def get_ratelimit_key(request) -> str:
"""Get the IP address of the incoming request.""" """Get the IP address of the incoming request."""
xff = None xff = None
@ -32,4 +37,9 @@ def get_ip_sync(request) -> str:
detected_ip = next((i for i in possible_ips if i), None) detected_ip = next((i for i in possible_ips if i), None)
for whitelisted_ip in os.getenv('NO_RATELIMIT_IPS', '').split():
if whitelisted_ip in detected_ip:
custom_key = f'whitelisted-{time.time()}'
return custom_key
return detected_ip return detected_ip

View file

@ -32,7 +32,7 @@ app.include_router(core.router)
limiter = Limiter( limiter = Limiter(
swallow_errors=True, swallow_errors=True,
key_func=network.get_ip_sync, default_limits=[ key_func=network.get_ratelimit_key, default_limits=[
'2/second', '2/second',
'20/minute', '20/minute',
'300/hour' '300/hour'

View file

@ -3,17 +3,20 @@
# Commit to the production branch # Commit to the production branch
# git commit -am "Auto-trigger - Production server started" && git push origin Production # git commit -am "Auto-trigger - Production server started" && git push origin Production
# Kill production server
fuser -k 2333/tcp
# Clear production directory
rm -rf /home/nova-prod/*
# Copy files to production # Copy files to production
cp -r * /home/nova-prod cp -r * /home/nova-prod
# Copy env file to production # Copy .prod.env file to production
cp env/.prod.env /home/nova-prod/.env cp env/.prod.env /home/nova-prod/.env
# Change directory # Change directory
cd /home/nova-prod cd /home/nova-prod
# Kill the production server
fuser -k 2333/tcp
# Start screen # Start screen
screen -S nova-api python run prod && sleep 5 screen -S nova-api python run prod && sleep 5