Add whitelist endpoint

This commit is contained in:
Dustin Pianalto 2019-12-16 21:05:34 -09:00
parent 5c3f190b35
commit 8f784e5b89
2 changed files with 26 additions and 2 deletions

View File

@ -1,10 +1,11 @@
from django.urls import path from django.urls import path
from .views import RCONServersAPI, RCONServerDetailAPI, ListPlayers from .views import RCONServersAPI, RCONServerDetailAPI, ListPlayers, WhitelistAPI
app_name = "rcon_api" app_name = "rcon_api"
urlpatterns = [ urlpatterns = [
path("<str:guild_id>/", view=RCONServersAPI.as_view(), name='guild_servers'), path("<str:guild_id>/", view=RCONServersAPI.as_view(), name='guild_servers'),
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'),
] ]

View File

@ -10,6 +10,7 @@ from .models import RconServer
from .utils import create_error_response, create_success_response, create_rcon_response from .utils import create_error_response, create_success_response, create_rcon_response
from utils.api_utils import PaginatedAPIView from utils.api_utils import PaginatedAPIView
from .serializers import RconServerSerializer from .serializers import RconServerSerializer
from users.models import User
# Create your views here. # Create your views here.
@ -70,3 +71,25 @@ class ListPlayers(PaginatedAPIView):
return create_error_response('RCON Server Does Not Exist', return create_error_response('RCON Server Does Not Exist',
status=status.HTTP_404_NOT_FOUND) status=status.HTTP_404_NOT_FOUND)
class WhitelistAPI(APIView):
permission_classes = [IsAuthenticated]
def post(self, request, guild_id, name, format=None):
discord_id = request.data.get('discord_id')
if not discord_id:
return create_error_response("A Discord ID is required",
status=status.HTTP_400_BAD_REQUEST)
user = User.get_user_by_id(discord_id)
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.whitelist(user.steam_id)
return create_rcon_response(resp, status=status.HTTP_200_OK)