Compare commits
No commits in common. "ee02452dd5a61b0487706782020f9647ae202238" and "42ce4f89537ca9b42c9e9f26ef6866aa4f9114b0" have entirely different histories.
ee02452dd5
...
42ce4f8953
@ -8,7 +8,7 @@ RUN echo "geeksbot ALL (ALL) NOPASSWD: ALL" >> /etc/sudoers
|
|||||||
RUN echo "geeksbot:docker" | chpasswd
|
RUN echo "geeksbot:docker" | chpasswd
|
||||||
|
|
||||||
RUN apk update && \
|
RUN apk update && \
|
||||||
apk add gcc python3-dev musl-dev postgresql-dev \
|
apk add --virtual build-deps gcc python3-dev musl-dev postgresql-dev \
|
||||||
# Pillow dependencies
|
# Pillow dependencies
|
||||||
&& apk add jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev \
|
&& apk add jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev \
|
||||||
# CFFI dependencies
|
# CFFI dependencies
|
||||||
@ -16,7 +16,7 @@ RUN apk update && \
|
|||||||
# Translations dependencies
|
# Translations dependencies
|
||||||
&& apk add gettext \
|
&& apk add gettext \
|
||||||
# https://docs.djangoproject.com/en/dev/ref/django-admin/#dbshell
|
# https://docs.djangoproject.com/en/dev/ref/django-admin/#dbshell
|
||||||
&& apk add postgresql-client make git
|
&& apk add postgresql-client
|
||||||
|
|
||||||
RUN mkdir /code
|
RUN mkdir /code
|
||||||
|
|
||||||
|
|||||||
@ -105,8 +105,8 @@ ANYMAIL = {
|
|||||||
# Collectfast
|
# Collectfast
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# https://github.com/antonagestam/collectfast#installation
|
# https://github.com/antonagestam/collectfast#installation
|
||||||
# INSTALLED_APPS = ["collectfast"] + INSTALLED_APPS # noqa F405
|
INSTALLED_APPS = ["collectfast"] + INSTALLED_APPS # noqa F405
|
||||||
# AWS_PRELOAD_METADATA = True
|
AWS_PRELOAD_METADATA = True
|
||||||
|
|
||||||
# LOGGING
|
# LOGGING
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|||||||
@ -235,13 +235,9 @@ class AdminRequest(models.Model):
|
|||||||
return cls.objects.filter(guild__id=guild_id).filter(completed=False)
|
return cls.objects.filter(guild__id=guild_id).filter(completed=False)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_requests_by_guild(cls, guild_id):
|
def get_open_request_by_id(cls, guild_id, request_id):
|
||||||
return cls.objects.filter(guild__id=guild_id)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_request_by_id(cls, guild_id, request_id):
|
|
||||||
try:
|
try:
|
||||||
return cls.get_requests_by_guild(guild_id).get(id=request_id)
|
return cls.get_open_requests_by_guild(guild_id).get(id=request_id)
|
||||||
except ObjectDoesNotExist:
|
except ObjectDoesNotExist:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -266,7 +262,7 @@ class AdminComment(models.Model):
|
|||||||
if not (request_id and author_id and content):
|
if not (request_id and author_id and content):
|
||||||
return create_error_response('Request, Author, and Content are required fields',
|
return create_error_response('Request, Author, and Content are required fields',
|
||||||
status=status.HTTP_400_BAD_REQUEST)
|
status=status.HTTP_400_BAD_REQUEST)
|
||||||
request = AdminRequest.get_request_by_id(guild_id, request_id)
|
request = AdminRequest.get_open_request_by_id(guild_id, request_id)
|
||||||
if not isinstance(request, AdminRequest):
|
if not isinstance(request, AdminRequest):
|
||||||
return create_error_response("Admin Request Does Not Exist",
|
return create_error_response("Admin Request Does Not Exist",
|
||||||
status=status.HTTP_404_NOT_FOUND)
|
status=status.HTTP_404_NOT_FOUND)
|
||||||
|
|||||||
@ -49,9 +49,8 @@ class MessageDetailAPI(APIView):
|
|||||||
if message:
|
if message:
|
||||||
return create_success_response(message, status.HTTP_200_OK, many=False)
|
return create_success_response(message, status.HTTP_200_OK, many=False)
|
||||||
else:
|
else:
|
||||||
return create_error_response(
|
return create_error_response("Message Does Not Exist",
|
||||||
"Message Does Not Exist", status=status.HTTP_404_NOT_FOUND
|
status=status.HTTP_404_NOT_FOUND)
|
||||||
)
|
|
||||||
|
|
||||||
def put(self, request, id, format=None):
|
def put(self, request, id, format=None):
|
||||||
data = dict(request.data)
|
data = dict(request.data)
|
||||||
@ -59,9 +58,8 @@ class MessageDetailAPI(APIView):
|
|||||||
if message:
|
if message:
|
||||||
return message.update_message(data)
|
return message.update_message(data)
|
||||||
else:
|
else:
|
||||||
return create_error_response(
|
return create_error_response('Message Does Not Exist',
|
||||||
"Message Does Not Exist", status=status.HTTP_404_NOT_FOUND
|
status=status.HTTP_404_NOT_FOUND)
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class WaitForMessageAPI(APIView):
|
class WaitForMessageAPI(APIView):
|
||||||
@ -74,10 +72,8 @@ class WaitForMessageAPI(APIView):
|
|||||||
sleep(0.1)
|
sleep(0.1)
|
||||||
try_count += 1
|
try_count += 1
|
||||||
if try_count > timeout * 10:
|
if try_count > timeout * 10:
|
||||||
return create_error_response(
|
return create_error_response("Timeout reached before message is available.",
|
||||||
"Timeout reached before message is available.",
|
statu=status.HTTP_404_NOT_FOUND)
|
||||||
status=status.HTTP_404_NOT_FOUND,
|
|
||||||
)
|
|
||||||
message = Message.get_message_by_id(id)
|
message = Message.get_message_by_id(id)
|
||||||
return create_success_response(message, status=status.HTTP_200_OK)
|
return create_success_response(message, status=status.HTTP_200_OK)
|
||||||
|
|
||||||
@ -91,9 +87,7 @@ class RequestsAPI(PaginatedAPIView):
|
|||||||
if page is not None:
|
if page is not None:
|
||||||
return create_request_success_response(page, status.HTTP_200_OK, many=True)
|
return create_request_success_response(page, status.HTTP_200_OK, many=True)
|
||||||
if requests:
|
if requests:
|
||||||
return create_request_success_response(
|
return create_request_success_response(requests, status.HTTP_200_OK, many=True)
|
||||||
requests, status.HTTP_200_OK, many=True
|
|
||||||
)
|
|
||||||
return create_error_response("No requests found")
|
return create_error_response("No requests found")
|
||||||
|
|
||||||
def post(self, request, guild_id, format=None):
|
def post(self, request, guild_id, format=None):
|
||||||
@ -110,9 +104,7 @@ class UserRequestsAPI(PaginatedAPIView):
|
|||||||
if page is not None:
|
if page is not None:
|
||||||
return create_request_success_response(page, status.HTTP_200_OK, many=True)
|
return create_request_success_response(page, status.HTTP_200_OK, many=True)
|
||||||
if requests:
|
if requests:
|
||||||
return create_request_success_response(
|
return create_request_success_response(requests, status.HTTP_200_OK, many=True)
|
||||||
requests, status.HTTP_200_OK, many=True
|
|
||||||
)
|
|
||||||
return create_error_response("No requests found")
|
return create_error_response("No requests found")
|
||||||
|
|
||||||
|
|
||||||
@ -120,36 +112,32 @@ class RequestDetailAPI(APIView):
|
|||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
def get(self, req, guild_id, request_id, format=None):
|
def get(self, req, guild_id, request_id, format=None):
|
||||||
req = AdminRequest.get_request_by_id(guild_id, request_id)
|
req = AdminRequest.get_open_request_by_id(guild_id, request_id)
|
||||||
if req:
|
if req:
|
||||||
comments = AdminComment.get_comments_by_request(req)
|
comments = AdminComment.get_comments_by_request(req)
|
||||||
if comments:
|
if comments:
|
||||||
data = AdminRequestSerializer(req).data
|
data = AdminRequestSerializer(req).data
|
||||||
data["comments"] = AdminCommentSerializer(comments, many=True).data
|
data['comments'] = AdminCommentSerializer(comments, many=True).data
|
||||||
return Response(data, status.HTTP_200_OK)
|
return Response(data, status.HTTP_200_OK)
|
||||||
else:
|
else:
|
||||||
return create_request_success_response(
|
return create_request_success_response(req, status.HTTP_200_OK, many=False)
|
||||||
req, status.HTTP_200_OK, many=False
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
return create_error_response(
|
return create_error_response("That Request Does Not Exist",
|
||||||
"That Request Does Not Exist", status=status.HTTP_404_NOT_FOUND
|
status=status.HTTP_404_NOT_FOUND)
|
||||||
)
|
|
||||||
|
|
||||||
def put(self, request, guild_id, request_id, format=None):
|
def put(self, request, guild_id, request_id, format=None):
|
||||||
req = AdminRequest.get_request_by_id(guild_id, request_id)
|
req = AdminRequest.get_open_request_by_id(guild_id, request_id)
|
||||||
if req:
|
if req:
|
||||||
data = dict(request.data)
|
data = dict(request.data)
|
||||||
return req.update_request(data)
|
return req.update_request(data)
|
||||||
return create_error_response(
|
return create_error_response("That Request Does Not Exist",
|
||||||
"That Request Does Not Exist", status=status.HTTP_404_NOT_FOUND
|
status=status.HTTP_404_NOT_FOUND)
|
||||||
)
|
|
||||||
|
|
||||||
def delete(self, request, guild_id, request_id, format=None):
|
def delete(self, request, guild_id, request_id, format=None):
|
||||||
data = dict(request.data)
|
data = dict(request.data)
|
||||||
request = AdminRequest.get_request_by_id(guild_id, request_id)
|
request = AdminRequest.get_open_request_by_id(guild_id, request_id)
|
||||||
data["completed"] = True
|
data['completed'] = True
|
||||||
data["completed_at"] = datetime.utcnow()
|
data['completed_at'] = datetime.utcnow()
|
||||||
return request.update_request(data)
|
return request.update_request(data)
|
||||||
|
|
||||||
|
|
||||||
@ -159,9 +147,7 @@ class CommentsAPI(PaginatedAPIView):
|
|||||||
def get(self, request, guild_id, request_id, format=None):
|
def get(self, request, guild_id, request_id, format=None):
|
||||||
comments = AdminComment.get_comments_by_request(request_id)
|
comments = AdminComment.get_comments_by_request(request_id)
|
||||||
if comments:
|
if comments:
|
||||||
return create_comment_success_response(
|
return create_comment_success_response(comments, status=status.HTTP_200_OK, many=True)
|
||||||
comments, status=status.HTTP_200_OK, many=True
|
|
||||||
)
|
|
||||||
return create_error_response("No Comments found")
|
return create_error_response("No Comments found")
|
||||||
|
|
||||||
def post(self, request, guild_id, request_id, format=None):
|
def post(self, request, guild_id, request_id, format=None):
|
||||||
@ -186,14 +172,9 @@ class CommentDetailAPI(APIView):
|
|||||||
comment = AdminComment.get_comment_by_id(comment_id)
|
comment = AdminComment.get_comment_by_id(comment_id)
|
||||||
if comment:
|
if comment:
|
||||||
if comment.request.id != request_id:
|
if comment.request.id != request_id:
|
||||||
return create_error_response(
|
return create_error_response("That comment is not for this request",
|
||||||
"That comment is not for this request",
|
status=status.HTTP_400_BAD_REQUEST)
|
||||||
status=status.HTTP_400_BAD_REQUEST,
|
return create_comment_success_response(comment, status.HTTP_200_OK, many=False)
|
||||||
)
|
|
||||||
return create_comment_success_response(
|
|
||||||
comment, status.HTTP_200_OK, many=False
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
return create_error_response(
|
return create_error_response("Comment Does Not Exist",
|
||||||
"Comment Does Not Exist", status=status.HTTP_404_NOT_FOUND
|
status=status.HTTP_404_NOT_FOUND)
|
||||||
)
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
from django.urls import path
|
from django.urls import path
|
||||||
|
|
||||||
from .views import RCONServersAPI, RCONServerDetailAPI, ListPlayers, WhitelistAPI, BroadcastAPI
|
from .views import RCONServersAPI, RCONServerDetailAPI, ListPlayers, WhitelistAPI
|
||||||
|
|
||||||
app_name = "rcon_api"
|
app_name = "rcon_api"
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
@ -8,5 +8,4 @@ urlpatterns = [
|
|||||||
path("<str:guild_id>/<str:name>/", view=RCONServerDetailAPI.as_view(), name="server_detail"),
|
path("<str:guild_id>/<str:name>/", view=RCONServerDetailAPI.as_view(), name="server_detail"),
|
||||||
path("<str:guild_id>/<str:name>/listplayers/", view=ListPlayers.as_view(), name='listplayers'),
|
path("<str:guild_id>/<str:name>/listplayers/", view=ListPlayers.as_view(), name='listplayers'),
|
||||||
path("<str:guild_id>/<str:name>/whitelist/", view=WhitelistAPI.as_view(), name='whitelist'),
|
path("<str:guild_id>/<str:name>/whitelist/", view=WhitelistAPI.as_view(), name='whitelist'),
|
||||||
path("<str:guild_id>/<str:name>/broadcast/", view=BroadcastAPI.as_view(), name='broadcast'),
|
|
||||||
]
|
]
|
||||||
|
|||||||
@ -96,24 +96,3 @@ class WhitelistAPI(APIView):
|
|||||||
status=status.HTTP_408_REQUEST_TIMEOUT)
|
status=status.HTTP_408_REQUEST_TIMEOUT)
|
||||||
resp = ark.whitelist(user.steam_id)
|
resp = ark.whitelist(user.steam_id)
|
||||||
return create_rcon_response(resp, status=status.HTTP_200_OK)
|
return create_rcon_response(resp, status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
||||||
class BroadcastAPI(APIView):
|
|
||||||
permission_classes = [IsAuthenticated]
|
|
||||||
|
|
||||||
def post(self, request, guild_id, name, format=None):
|
|
||||||
message = request.data.get('message')
|
|
||||||
if not message:
|
|
||||||
return create_error_response('A message is required',
|
|
||||||
status=status.HTTP_400_BAD_REQUEST)
|
|
||||||
server: RconServer = RconServer.get_server(guild_id, name)
|
|
||||||
if not server:
|
|
||||||
return create_error_response('RCON Server Does Not Exist',
|
|
||||||
status=status.HTTP_404_NOT_FOUND)
|
|
||||||
ark = arcon.ARKServer(host=server.ip, port=server.port, password=server.password)
|
|
||||||
connected = ark.connect()
|
|
||||||
if not connected == 1:
|
|
||||||
return create_error_response('Connection Failure',
|
|
||||||
status=status.HTTP_408_REQUEST_TIMEOUT)
|
|
||||||
resp = ark.broadcast(message)
|
|
||||||
return create_rcon_response(resp, status=status.HTTP_200_OK)
|
|
||||||
|
|||||||
@ -1,22 +1,22 @@
|
|||||||
# Django
|
# Django
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
django # pyup: < 3.0 # https://www.djangoproject.com/
|
django==2.2.4 # pyup: < 3.0 # https://www.djangoproject.com/
|
||||||
django-environ # https://github.com/joke2k/django-environ
|
django-environ==0.4.5 # https://github.com/joke2k/django-environ
|
||||||
django-model-utils # https://github.com/jazzband/django-model-utils
|
django-model-utils==3.2.0 # https://github.com/jazzband/django-model-utils
|
||||||
django-allauth # https://github.com/pennersr/django-allauth
|
django-allauth==0.39.1 # https://github.com/pennersr/django-allauth
|
||||||
django-crispy-forms # https://github.com/django-crispy-forms/django-crispy-forms
|
django-crispy-forms==1.7.2 # https://github.com/django-crispy-forms/django-crispy-forms
|
||||||
django-redis # https://github.com/niwinz/django-redis
|
django-redis==4.10.0 # https://github.com/niwinz/django-redis
|
||||||
django-anymail[mailgun] # https://github.com/anymail/django-anymail
|
django-anymail[mailgun]==6.1.0 # https://github.com/anymail/django-anymail
|
||||||
django-debug-toolbar
|
django-debug-toolbar
|
||||||
django-extensions
|
django-extensions
|
||||||
|
|
||||||
# Django REST Framework
|
# Django REST Framework
|
||||||
djangorestframework # https://github.com/encode/django-rest-framework
|
djangorestframework==3.10.2 # https://github.com/encode/django-rest-framework
|
||||||
coreapi # https://github.com/core-api/python-client
|
coreapi==2.3.3 # https://github.com/core-api/python-client
|
||||||
|
|
||||||
gevent
|
gevent
|
||||||
gunicorn # https://github.com/benoitc/gunicorn
|
gunicorn==19.9.0 # https://github.com/benoitc/gunicorn
|
||||||
psycopg2 --no-binary psycopg2 # https://github.com/psycopg/psycopg2
|
psycopg2==2.8.3 --no-binary psycopg2 # https://github.com/psycopg/psycopg2
|
||||||
# Collectfast # https://github.com/antonagestam/collectfast
|
Collectfast==1.0.0 # https://github.com/antonagestam/collectfast
|
||||||
|
|
||||||
python-valve
|
python-valve
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user