feat: spin up and install Gitea and create new user for testing

This commit is contained in:
Aravinth Manivannan 2022-04-06 09:24:15 +05:30
parent 7852ae634d
commit 98a765ddea
Signed by: realaravinth
GPG key ID: AD9F0F08E855ED88
3 changed files with 164 additions and 0 deletions

2
.gitignore vendored
View file

@ -1,2 +1,4 @@
/target
.env
**/target/
tmp

View 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
View 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