import logging as lg import os import requests from django import forms from django.conf import settings from django.core.handlers.wsgi import WSGIRequest logger = lg.getLogger(__name__) def create_gitea_account(user, password): payload = { "user_id": user.id, "username": f"studio77-{user.id}", "email": user.email, "full_name": f"{user.first_name} {user.last_name}".strip(), "password": password, "must_change_password": False, "visibility": "private", } api_url = getattr(settings, "GITEA_URL", None) if api_url: url = f"{api_url}/admin/users" try: response = requests.post( url, json=payload, timeout=5, headers={"Authorization": f"token {os.getenv('GITEA_API_TOKEN')}"}, ) response.raise_for_status() logger.info(f"Successfully created Gitea account for {user.email}") except requests.exceptions.HTTPError as http_err: status_code = http_err.response.status_code if status_code == 422: logger.warning( f"Gitea account for user {user.email} already exists. Skipping creation." ) else: logger.error( f"HTTP error occurred while creating Gitea account for user {user.email}: {http_err}\n{response.text}" ) raise http_err except Exception as e: logger.error( f"Failed to create Gitea account for user {user.email}: {e}\n{response.text}" ) raise e class SignUpForm(forms.Form): first_name = forms.CharField(max_length=60, required=True, label="First Name") last_name = forms.CharField(max_length=60, required=True, label="Last Name") def signup(self, request: WSGIRequest, user): user.first_name = self.cleaned_data["first_name"].strip().title() user.last_name = self.cleaned_data["last_name"].strip().title() user.save() # gitea account creation password = request.POST.get("password1") create_gitea_account(user, password)