Skip to content
This repository was archived by the owner on Feb 15, 2024. It is now read-only.

Commit 1e4fdd2

Browse files
committed
lastStatus object parsing from the server page
1 parent 9d3de01 commit 1e4fdd2

2 files changed

Lines changed: 26 additions & 11 deletions

File tree

python_aternos/atserver.py

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
"""Aternos Minecraft server"""
22

3-
import enum
3+
import re
44
import json
55

6+
import enum
7+
68
from typing import Optional
79
from typing import List, Dict, Any
810

911
import requests
1012

11-
from .atconnect import AJAX_URL
13+
from .atconnect import BASE_URL, AJAX_URL
1214
from .atconnect import AternosConnect
1315
from .atwss import AternosWss
1416

@@ -18,9 +20,15 @@
1820
from .atfm import FileManager
1921
from .atconf import AternosConfig
2022

23+
from .aterrors import AternosError
2124
from .aterrors import ServerStartError
2225

2326

27+
status_re = re.compile(
28+
r'<script>\s*var lastStatus\s*?=\s*?(\{.+?\});?\s*<\/script>'
29+
)
30+
31+
2432
class Edition(enum.IntEnum):
2533

2634
"""Server edition type enum (java, bedrock)"""
@@ -56,7 +64,7 @@ class AternosServer:
5664
def __init__(
5765
self, servid: str,
5866
atconn: AternosConnect,
59-
reqinfo: bool = True) -> None:
67+
reqinfo: bool = False) -> None:
6068
"""Class for controlling your Aternos Minecraft server
6169
6270
Args:
@@ -69,17 +77,24 @@ def __init__(
6977

7078
self.servid = servid
7179
self.atconn = atconn
80+
7281
if reqinfo:
7382
self.fetch()
7483

7584
def fetch(self) -> None:
76-
"""Send a request to Aternos API to get all server info"""
85+
"""Get all server info"""
7786

78-
servreq = self.atserver_request(
79-
f'{AJAX_URL}/status.php',
80-
'GET', sendtoken=True
87+
page = self.atserver_request(
88+
f'{BASE_URL}/server', 'GET'
8189
)
82-
self._info = json.loads(servreq.content)
90+
with open('server.html', 'wt') as f:
91+
f.write(page.text)
92+
match = status_re.search(page.text)
93+
94+
if match is None:
95+
raise AternosError('Unable to parse lastStatus object')
96+
97+
self._info = json.loads(match[1])
8398

8499
def wss(self, autoconfirm: bool = False) -> AternosWss:
85100
"""Returns AternosWss instance for

tests/test_login.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ def setUp(self) -> None:
2626

2727
def test_auth(self) -> None:
2828

29-
self.at = Client.from_hashed(self.user, self.pswd)
29+
self.at = Client.from_credentials(self.user, self.pswd)
3030
self.assertIsNotNone(self.at)
3131

3232
def test_servers(self) -> None:
3333

3434
if self.at is None:
35-
self.at = Client.from_hashed(
35+
self.at = Client.from_credentials(
3636
self.user, self.pswd
3737
)
3838

@@ -46,7 +46,7 @@ def test_servers(self) -> None:
4646
def test_logout(self) -> None:
4747

4848
if self.at is None:
49-
self.at = Client.from_hashed(
49+
self.at = Client.from_credentials(
5050
self.user, self.pswd
5151
)
5252

0 commit comments

Comments
 (0)