64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
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)
|