Skip to content

Commit

Permalink
URLS moved to urls.py
Browse files Browse the repository at this point in the history
  • Loading branch information
lpalmisa committed Mar 16, 2021
1 parent 849532b commit 5ab5819
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 33 deletions.
11 changes: 4 additions & 7 deletions pymojang/auth/security_check.py
Original file line number Diff line number Diff line change
@@ -1,28 +1,25 @@
import requests
import json
from urllib.parse import urljoin
from ..urls import MOJANG_API

class SecurityCheck:

ROOT_URL = 'https://api.mojang.com/user/security/'

def __init__(self, session: requests.Session):
self._session = session

@property
def ok(self):
check_url = urljoin(self.ROOT_URL, 'location')
check_url = MOJANG_API.join('user/security/location')
response = self._session.get(check_url)
return response.status_code == 204

@property
def challenges(self):
challenges_url = urljoin(self.ROOT_URL, 'challenges')
challenges_url = MOJANG_API.join('user/security/challenges')
response = self._session.get(challenges_url)
return response.json()

def send_answers(self, answers: list):
answers_url = urljoin(self.ROOT_URL, 'location')
answers_url = MOJANG_API.join('user/security/location')
response = self._session.post(answers_url, json=answers)
return response.status_code == 204

Expand Down
15 changes: 6 additions & 9 deletions pymojang/auth/yggdrasil.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
import requests
import json
from urllib.parse import urljoin
from ..utils import TokenPair
from ..urls import MOJANG_AUTHSERVER

class Yggdrasil:

ROOT_URL = 'https://authserver.mojang.com'

def __init__(self,session: requests.Session, token_pair: TokenPair):
self._session = session
self._token_pair = token_pair
Expand All @@ -15,7 +12,7 @@ def __init__(self,session: requests.Session, token_pair: TokenPair):
self._session.headers.update({'Authorization': f'Bearer {self._token_pair.access_token}'})

def authenticate(self, username: str, password: str):
auth_url = urljoin(self.ROOT_URL, 'authenticate')
auth_url = MOJANG_AUTHSERVER.join('authenticate')
payload = {
'username': username,
'password': password,
Expand All @@ -31,7 +28,7 @@ def authenticate(self, username: str, password: str):
pass

def refresh(self):
refresh_url = urljoin(self.ROOT_URL, 'refresh')
refresh_url = MOJANG_AUTHSERVER.join('refresh')
payload = {
'accessToken': self._token_pair.access_token,
'clientToken': self._token_pair.client_token
Expand All @@ -46,7 +43,7 @@ def refresh(self):
pass

def validate(self):
validate_url = urljoin(self.ROOT_URL, 'validate')
validate_url = MOJANG_AUTHSERVER.join('validate')
payload = {
'accessToken': self._token_pair.access_token,
'clientToken': self._token_pair.client_token
Expand All @@ -56,7 +53,7 @@ def validate(self):
return response.status_code == 204

def signout(self, username: str, password: str):
signout_url = urljoin(self.ROOT_URL, 'signout')
signout_url = MOJANG_AUTHSERVER.join('signout')
payload = {
'username': username,
'password': password
Expand All @@ -72,7 +69,7 @@ def signout(self, username: str, password: str):
return False

def invalidate(self):
invalidate_url = urljoin(self.ROOT_URL, 'invalidate')
invalidate_url = MOJANG_AUTHSERVER.join('invalidate')
payload = {
'accessToken': self._token_pair.access_token,
'clientToken': self._token_pair.client_token
Expand Down
7 changes: 7 additions & 0 deletions pymojang/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from .utils.url import URL

MOJANG_AUTHSERVER = URL('https://authserver.mojang.com')
MOJANG_API = URL('https://api.mojang.com')
MOJANG_STATUS = URL('https://status.mojang.com')
MOJANG_SESSION = URL('https://sessionserver.mojang.com')
MINECRAFT_SERVICES = URL('https://api.minecraftservices.com')
17 changes: 6 additions & 11 deletions pymojang/user/api.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,14 @@
import requests
import json
import datetime as dt
from urllib.parse import urljoin
from base64 import urlsafe_b64decode
from .profile import UserProfile
from .skin import Skin
from .cape import Cape

MOJANG_STATUS_URL = 'https://status.mojang.com/check'
MOJANG_API_URL = 'https://api.mojang.com'
MOJANG_SESSION_URL = 'https://sessionserver.mojang.com'
from ..urls import MOJANG_STATUS, MOJANG_API, MOJANG_SESSION

def api_status():
result = {}
response = requests.get(MOJANG_STATUS_URL)
response = requests.get(MOJANG_STATUS.join('check'))
if response.status_code == 200:
data = response.json()

Expand All @@ -24,7 +19,7 @@ def api_status():
return result

def get_name_history(player_id: str):
url = urljoin(MOJANG_API_URL, 'user/profiles/{}/names'.format(player_id))
url = MOJANG_API.join('user/profiles/{}/names'.format(player_id))
response = requests.get(url)

names = []
Expand All @@ -39,7 +34,7 @@ def get_name_history(player_id: str):
return names

def get_uuid(username: str, timestamp=None, only_uuid=True):
url = urljoin(MOJANG_API_URL, 'users/profiles/minecraft/{}'.format(username))
url = MOJANG_API.join('users/profiles/minecraft/{}'.format(username))
params = {'at': timestamp} if timestamp else {}

response = requests.get(url, params=params)
Expand All @@ -61,7 +56,7 @@ def get_uuid(username: str, timestamp=None, only_uuid=True):
return player_uuid, player_name, player_is_legacy, player_is_demo

def get_uuids(usernames: list, only_uuid=True):
url = urljoin(MOJANG_API_URL, 'profiles/minecraft')
url = MOJANG_API.join('profiles/minecraft')
players_data = []

if len(usernames) > 0:
Expand All @@ -84,7 +79,7 @@ def get_uuids(usernames: list, only_uuid=True):
return players_data

def get_profile(player_id: str):
url = urljoin(MOJANG_SESSION_URL, 'session/minecraft/profile/{}'.format(player_id))
url = MOJANG_SESSION.join('session/minecraft/profile/{}'.format(player_id))
response = requests.get(url)
profile = UserProfile()

Expand Down
8 changes: 3 additions & 5 deletions pymojang/user/session.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
import requests
import os
import datetime as dt
from urllib.parse import urljoin
from . import api
from .profile import UserProfile
from ..auth import Yggdrasil, SecurityCheck
from ..utils import TokenPair
from .skin import Skin
from .cape import Cape
from ..urls import MINECRAFT_SERVICES

class UserSession:

MINECRAFT_SERVICE_URL = 'https://api.minecraftservices.com'

def __init__(self, username: str, password: str, token_file=None):
self._session = requests.Session()
self._session.headers.update({'Content-Type': 'application/json'})
Expand Down Expand Up @@ -69,7 +67,7 @@ def _load_user_data(self):
self._profile.names = api.get_name_history(self._profile.id)

def _get_name_change(self):
name_change_url = urljoin(self.MINECRAFT_SERVICE_URL, 'minecraft/profile/namechange')
name_change_url = MINECRAFT_SERVICES.join('minecraft/profile/namechange')
response = self._session.get(name_change_url)

if response.status_code == 200:
Expand All @@ -80,7 +78,7 @@ def _get_name_change(self):
pass

def _get_profile(self):
profile_url = urljoin(self.MINECRAFT_SERVICE_URL, 'minecraft/profile')
profile_url = MINECRAFT_SERVICES.join('minecraft/profile')
response = self._session.get(profile_url)

if response.status_code == 200:
Expand Down
17 changes: 17 additions & 0 deletions pymojang/utils/url.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from urllib.parse import urljoin

class URL:

def __init__(self, root: str):
self.__root = root

def join(self, *paths):
base = self.__root
for path in paths:
base = urljoin(base, path)
return base

@property
def root(self):
return self.__root

2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@
licence='MIT',
description='It\'s a full wrapper arround de mojang API and authentication API',
packages=['pymojang'],
install_requires=['requests']
install_requires=['requests','validators']
)

0 comments on commit 5ab5819

Please sign in to comment.