63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
|
from sys import path as file_dir
|
||
|
from os import chdir
|
||
|
from shutil import unpack_archive
|
||
|
from subprocess import run
|
||
|
|
||
|
import requests
|
||
|
from bs4 import BeautifulSoup
|
||
|
|
||
|
settings = {
|
||
|
# Overleaf instance url
|
||
|
"OVERLEAF_INSTANCE_URL": "http://hostname.com",
|
||
|
# Project id (can be seen in the url when project is opened)
|
||
|
"OVERLEAF_PROJECT_ID": "",
|
||
|
# Overleaf login email
|
||
|
"OVERLEAF_USER_EMAIL": "",
|
||
|
# Overleaf login password
|
||
|
"OVERLEAF_USER_PASSWORD": "",
|
||
|
# A subdirectory where the project code is stored to in repository
|
||
|
"GIT_SUBDIR": "latex",
|
||
|
# Git branch name
|
||
|
"GIT_BRANCH_NAME": "main",
|
||
|
# Git commit user name
|
||
|
"GIT_USER_NAME": "User Name",
|
||
|
# Git commit user email
|
||
|
"GIT_USER_EMAIL": "user@domain.com",
|
||
|
# Git repository url. Repo must already be created
|
||
|
"GIT_REMOTE_URL": "git@github.com:user/repo.git"
|
||
|
}
|
||
|
|
||
|
def main():
|
||
|
# Prepare repository directory
|
||
|
run(["/bin/bash", "-c", "./pre_sync.sh"], env=settings)
|
||
|
|
||
|
# Get data from overleaf
|
||
|
s = requests.Session()
|
||
|
# First get the login site to get a valid csrf token
|
||
|
r = s.get(f"{settings['OVERLEAF_INSTANCE_URL']}/login")
|
||
|
soup = BeautifulSoup(r.text, "html.parser")
|
||
|
csrf_token = soup.select_one('input[name="_csrf"]')['value']
|
||
|
|
||
|
# Now login
|
||
|
r = s.post(f"{settings['OVERLEAF_INSTANCE_URL']}/login", json={"email": settings["OVERLEAF_USER_EMAIL"], "password": settings["OVERLEAF_USER_PASSWORD"], "_csrf": csrf_token}, headers={"Content-Type": "application/json", "X-Csrf-Token": csrf_token})
|
||
|
# Then just download the project zip file
|
||
|
r = s.get(f"{settings['OVERLEAF_INSTANCE_URL']}/project/{settings['OVERLEAF_PROJECT_ID']}/download/zip")
|
||
|
with open("content.zip", "wb") as file:
|
||
|
file.write(r.content)
|
||
|
|
||
|
# Unzip it
|
||
|
unzip_path = "content"
|
||
|
if(settings["GIT_SUBDIR"] and settings["GIT_SUBDIR"] != ""):
|
||
|
unzip_path += "/" + settings["GIT_SUBDIR"]
|
||
|
unpack_archive("content.zip", unzip_path)
|
||
|
|
||
|
# Git commit and push
|
||
|
run(["/bin/bash", "-c", "./commit_script.sh"], env=settings)
|
||
|
|
||
|
# Cleanup
|
||
|
run(["rm", "content.zip"])
|
||
|
run(["rm", "-rf", "content"])
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
chdir(file_dir[0])
|
||
|
main()
|