feat: spin up and install Gitea and create new user for testing
This commit is contained in:
parent
7852ae634d
commit
98a765ddea
3 changed files with 164 additions and 0 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,2 +1,4 @@
|
|||
/target
|
||||
.env
|
||||
**/target/
|
||||
tmp
|
||||
|
|
23
docker-compose-dev-deps.yml
Normal file
23
docker-compose-dev-deps.yml
Normal file
|
@ -0,0 +1,23 @@
|
|||
version: "3"
|
||||
|
||||
networks:
|
||||
gitea:
|
||||
external: false
|
||||
|
||||
services:
|
||||
server:
|
||||
image: gitea/gitea:1.16.5
|
||||
container_name: gitea
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
restart: always
|
||||
networks:
|
||||
- gitea
|
||||
volumes:
|
||||
- ./tmp/gitea:/data
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
ports:
|
||||
- "8080:3000"
|
||||
- "2221:22"
|
139
scripts/gitea.py
Executable file
139
scripts/gitea.py
Executable file
|
@ -0,0 +1,139 @@
|
|||
from urllib.parse import urlunparse, urlparse
|
||||
from html.parser import HTMLParser
|
||||
from time import sleep
|
||||
|
||||
from requests import Session
|
||||
import requests
|
||||
|
||||
GITEA_USER = "bot"
|
||||
GITEA_EMAIL = "bot@example.com"
|
||||
GITEA_PASSWORD = "foobarpassword"
|
||||
|
||||
requests.get
|
||||
|
||||
|
||||
def check_online():
|
||||
count = 0
|
||||
while True:
|
||||
try:
|
||||
res = requests.get(
|
||||
"http://localhost:8080/api/v1/nodeinfo", allow_redirects=False
|
||||
)
|
||||
if any([res.status_code == 302, res.status_code == 200]):
|
||||
break
|
||||
except:
|
||||
sleep(2)
|
||||
print(f"Retrying {count} time")
|
||||
count += 1
|
||||
continue
|
||||
|
||||
|
||||
def install():
|
||||
INSTALL_PAYLOAD = {
|
||||
"db_type": "sqlite3",
|
||||
"db_host": "localhost:3306",
|
||||
"db_user": "root",
|
||||
"db_passwd": "",
|
||||
"db_name": "gitea",
|
||||
"ssl_mode": "disable",
|
||||
"db_schema": "",
|
||||
"charset": "utf8",
|
||||
"db_path": "/data/gitea/gitea.db",
|
||||
"app_name": "Gitea:+Git+with+a+cup+of+tea",
|
||||
"repo_root_path": "/data/git/repositories",
|
||||
"lfs_root_path": "/data/git/lfs",
|
||||
"run_user": "git",
|
||||
"domain": "localhost",
|
||||
"ssh_port": "2221",
|
||||
"http_port": "3000",
|
||||
"app_url": "http://localhost:8080/",
|
||||
"log_root_path": "/data/gitea/log",
|
||||
"smtp_host": "",
|
||||
"smtp_from": "",
|
||||
"smtp_user": "",
|
||||
"smtp_passwd": "",
|
||||
"enable_federated_avatar": "on",
|
||||
"enable_open_id_sign_in": "on",
|
||||
"enable_open_id_sign_up": "on",
|
||||
"default_allow_create_organization": "on",
|
||||
"default_enable_timetracking": "on",
|
||||
"no_reply_address": "noreply.localhost",
|
||||
"password_algorithm": "pbkdf2",
|
||||
"admin_name": "",
|
||||
"admin_passwd": "",
|
||||
"admin_confirm_passwd": "",
|
||||
"admin_email": "",
|
||||
}
|
||||
requests.post(f"http://localhost:8080", data=INSTALL_PAYLOAD)
|
||||
|
||||
|
||||
class ParseCSRFGiteaForm(HTMLParser):
|
||||
token: str = None
|
||||
|
||||
def handle_starttag(self, tag: str, attrs: (str, str)):
|
||||
if self.token:
|
||||
return
|
||||
|
||||
if tag != "input":
|
||||
return
|
||||
|
||||
token = None
|
||||
for (index, (k, v)) in enumerate(attrs):
|
||||
if k == "value":
|
||||
token = v
|
||||
|
||||
if all([k == "name", v == "_csrf"]):
|
||||
if token:
|
||||
self.token = token
|
||||
return
|
||||
for (inner_index, (nk, nv)) in enumerate(attrs, start=index):
|
||||
if nk == "value":
|
||||
self.token = nv
|
||||
return
|
||||
|
||||
|
||||
class HTMLClient:
|
||||
session: Session
|
||||
|
||||
def __init__(self):
|
||||
self.session = Session()
|
||||
|
||||
@staticmethod
|
||||
def get_csrf_token(page: str) -> str:
|
||||
parser = ParseCSRFGiteaForm()
|
||||
parser.feed(page)
|
||||
csrf = parser.token
|
||||
return csrf
|
||||
|
||||
def register(client: HTMLClient):
|
||||
url = "http://localhost:8080/user/sign_up"
|
||||
resp = client.session.get(url, allow_redirects=False)
|
||||
if resp.status_code != 200:
|
||||
print(resp.status_code, resp.text)
|
||||
raise Exception(resp.status_code)
|
||||
csrf = client.get_csrf_token(resp.text)
|
||||
payload = {
|
||||
"_csrf": csrf,
|
||||
"user_name": GITEA_USER,
|
||||
"password": GITEA_PASSWORD,
|
||||
"retype": GITEA_PASSWORD,
|
||||
"email": GITEA_EMAIL,
|
||||
}
|
||||
resp = client.session.post(url, data=payload, allow_redirects=False)
|
||||
|
||||
if __name__ == "__main__":
|
||||
check_online()
|
||||
print("Instace online")
|
||||
install()
|
||||
print("Instace configured and installed")
|
||||
client = HTMLClient()
|
||||
count = 0
|
||||
while True:
|
||||
try:
|
||||
register(client)
|
||||
print("User registered")
|
||||
break
|
||||
except:
|
||||
print(f"Retrying {count} time")
|
||||
count += 1
|
||||
continue
|
Loading…
Reference in a new issue