From f9cb03b76fa800c3431a82e1c12705750e9cb0c7 Mon Sep 17 00:00:00 2001 From: Victor Westerlund Date: Tue, 24 Nov 2020 14:13:40 +0100 Subject: [PATCH] 0.1.0 Package release Release of 0.1.0 as packacke. Install with `pip3` --- __init__.py | 1 - build/lib/labylib/Cape.py | 98 ++++++++++++++++++++++++++ build/lib/labylib/__init__.py | 0 dist/labylib-0.1.0-py3-none-any.whl | Bin 0 -> 16638 bytes dist/labylib-0.1.0.tar.gz | Bin 0 -> 3939 bytes labylib.egg-info/PKG-INFO | 90 +++++++++++++++++++++++ labylib.egg-info/SOURCES.txt | 8 +++ labylib.egg-info/dependency_links.txt | 1 + labylib.egg-info/top_level.txt | 1 + labylib/__init__.py | 0 setup.py | 22 ++++++ 11 files changed, 220 insertions(+), 1 deletion(-) delete mode 100644 __init__.py create mode 100644 build/lib/labylib/Cape.py create mode 100644 build/lib/labylib/__init__.py create mode 100644 dist/labylib-0.1.0-py3-none-any.whl create mode 100644 dist/labylib-0.1.0.tar.gz create mode 100644 labylib.egg-info/PKG-INFO create mode 100644 labylib.egg-info/SOURCES.txt create mode 100644 labylib.egg-info/dependency_links.txt create mode 100644 labylib.egg-info/top_level.txt create mode 100644 labylib/__init__.py create mode 100644 setup.py diff --git a/__init__.py b/__init__.py deleted file mode 100644 index d6beb08..0000000 --- a/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from labylib.labylib import Cape \ No newline at end of file diff --git a/build/lib/labylib/Cape.py b/build/lib/labylib/Cape.py new file mode 100644 index 0000000..fcac83d --- /dev/null +++ b/build/lib/labylib/Cape.py @@ -0,0 +1,98 @@ +import requests +import hashlib +import time + +class RequestError(Exception): pass + +class Texture: + + endpoint = "https://www.labymod.net/page/php/cape.php" + + def __init__(self,cookie,img): + self.validate(cookie,img) + + self.body = b"" # Initialize request body + self.cookies = dict(PHPSESSID = cookie) + self.boundary = self.boundary() + + self.headers = { + "accept": "*/*", + "accept-encoding": "gzip, deflate, br", + "accept-language": "en-US,en;q=0.9,sv;q=0.8", + "cache-control": "no-cache", + "dnt": "1", + "user-agent": "Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0", + "origin": "https://www.labymod.net", + "pragma": "no-cache", + "referer": "https://www.labymod.net/dashboard", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "same-origin", + "x-requested-with": "XMLHttpRequest", + "Content-Type": "multipart/form-data; boundary=" + self.boundary + } + + self.appendBinaryFormData(b"cosmetic",b"cape") + self.appendBinaryFormData(b"file",self.bOpen(img)) + + # ----------------------------------- + + def validate(self,cookie,file): + return True + + # Generate boundary header from MD5-hash of current time + def boundary(self): + seed = str(time.time()) + md5 = hashlib.md5(seed.encode("utf-8")) + + boundary = "----WebKitFormBoundary" + md5.hexdigest() + return boundary + + # Open and return file binary as string + def bOpen(self,file): + f = open(file,"rb") + content = f.read() + f.close() + + return content + + # Append form-data to request body and boundary header + def appendBinaryFormData(self,name,payload): + body = contentType = b"" + eol = b"\r\n" + + disposition = b'name="' + name + b'"' + if(name == b"file"): + contentType = b"Content-Type: image/png" + eol + + # Use current epoch as filename. It has to be different from last request + filename = str(round(time.time())) + ".png" + filename = filename.encode() + disposition += b'; filename="' + filename + b'"' + + body += b"--" + self.boundary.encode() + eol # Init data header + body += b"Content-Disposition: form-data; " + disposition + eol + body += contentType + eol + body += payload + eol + + self.body += body + + # Last form-data has been set, add final post width for boundary header + def closeBinaryFormData(self): + self.body += b"--" + self.boundary.encode() + b"--\r\n\r\n" + + # ----------------------------------- + + def update(self): + self.closeBinaryFormData() # Add final boundary header + + request = requests.post(Texture.endpoint, + headers = self.headers, + cookies = self.cookies, + data = self.body + ) + + # Raise exception if request fails + # Use [3:5] to clean up junk chars from reponse body + if(str(request.text)[3:5] != "OK"): + raise RequestError(str(request.text)) \ No newline at end of file diff --git a/build/lib/labylib/__init__.py b/build/lib/labylib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dist/labylib-0.1.0-py3-none-any.whl b/dist/labylib-0.1.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..8cfb6c552cfdfb4af9354eed07607b0209bfc8b4 GIT binary patch literal 16638 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 xw(HPa&Qo;W@|L%} + _This program is offered as-is and might stop working at any time_ + + ## Installation + 1. Download and install [Python 3](https://www.python.org/downloads/) for your architecture. + 2. Clone this repo to your machine, or [download a zip](/VictorWesterlund/labylib/archive/master.zip) + ```bash + $ git clone https://github.com/VictorWesterlund/labylib/ + $ gh repo clone VictorWesterlund/labylib + ``` + + ## Quickstart + **1. Import a cosmetics module from `labylib/`.** + + [A list of all modules and classes can be found here](https://github.com/VictorWesterlund/labylib/wiki/Module-reference-sheet) + ```python + from labylib import Cape + ``` + **2. Initialize a module class.** + + All labylib classes take a `PHPSESSID` as their first argument. + + _Example with `Cape` where a file-path is expected as a second argument:_ + ```python + texture = Cape.Texture("","") # labylib = Cape.Texture("772nnas663jkc8ahbb2","/home/VicW/coolCape-2.png") + ``` + + **3. Submit a cosmetic update** + ```python + texture.update() + ``` + Python's [Built-in-exceptions](https://docs.python.org/3/library/exceptions.html#exception-hierarchy) are rasied as needed for missing texture files (`FileNotFoundError`) etc. If a request was sucuessfully sent to the Labymod endpoint, but it returned something falsey (not `OK`). A custom-defined `RequestError` exception will be raised; containing the response received from the endpoint. + ```python + try: + texture.update() + except RequestError as error: + print("Caugh RequestError exception:" + error) + # "Caugh RequestError exception: Session expired." + ``` + + ## Advanced usage + ### HTTP POST Headers + Request headers and cookies can be accessed and modified pre-submission by applying standard list modifications on the followin objects: `self.headers` and `self.cookies` + ```python + texture = Cape.Texture("","") + + texture.headers["Origin"] = "https://example.com/" + texture.cookies["Foo"] = "Bar" + + labylib.update() + ``` + ### HTTP POST Body + Binary form-data can be appended by calling `self.appendBinaryFormData(name,payload)`. + ```python + texture = Cape.Texture("","") + + texture.appendBinaryFormData(b"foo",b"bar") + texture.appendBinaryFormData(b"file","/home/VicW/home/VicW/coolCape-2.png") # Note that 'payload' is a String in this case (as opposed to Binary) + ``` + Special form-data types ('names'): + |name|Description + |--|--| + |`'file'`| Submit cosmetic texture file as BLOB by passing `payload` a binary-encoded PNG.
_`self.bOpen()` can be used to 'open()' a file as binary string._ + +Platform: UNKNOWN +Classifier: Programming Language :: Python :: 3 +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Requires-Python: >=3.6 +Description-Content-Type: text/markdown diff --git a/labylib.egg-info/SOURCES.txt b/labylib.egg-info/SOURCES.txt new file mode 100644 index 0000000..5f90f3a --- /dev/null +++ b/labylib.egg-info/SOURCES.txt @@ -0,0 +1,8 @@ +README.md +setup.py +labylib/Cape.py +labylib/__init__.py +labylib.egg-info/PKG-INFO +labylib.egg-info/SOURCES.txt +labylib.egg-info/dependency_links.txt +labylib.egg-info/top_level.txt \ No newline at end of file diff --git a/labylib.egg-info/dependency_links.txt b/labylib.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/labylib.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/labylib.egg-info/top_level.txt b/labylib.egg-info/top_level.txt new file mode 100644 index 0000000..09c8d44 --- /dev/null +++ b/labylib.egg-info/top_level.txt @@ -0,0 +1 @@ +labylib diff --git a/labylib/__init__.py b/labylib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..27e7eac --- /dev/null +++ b/setup.py @@ -0,0 +1,22 @@ +import setuptools + +with open("README.md","r") as fh: + long_description = fh.read() + +setuptools.setup( + name="labylib", + version="0.1.0", + author="VicW", + author_email="victor.vesterlund@gmail.com", + description="Python API to modify LabyMod cosmetics", + long_description=long_description, + long_description_content_type="text/markdown", + url="https://github.com/VictorWesterlund/labylib", + packages=setuptools.find_packages(), + classifiers=[ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + ], + python_requires='>=3.6', +) \ No newline at end of file