mirror of
https://gitverse.ru/kpa39l/netbox.git
synced 2026-09-29 18:05:10 +00:00
46 lines
1.9 KiB
Python
46 lines
1.9 KiB
Python
import sys
|
|
from os import environ
|
|
|
|
from django.conf import settings
|
|
from users.choices import TokenVersionChoices
|
|
from users.models import Token, User
|
|
|
|
|
|
# Read secret from file
|
|
def _read_secret(secret_name: str, default: str | None = None) -> str | None:
|
|
try:
|
|
with open('/run/secrets/' + secret_name, encoding='utf-8') as f:
|
|
return f.readline().strip()
|
|
except OSError:
|
|
return default
|
|
|
|
|
|
su_name = environ.get('SUPERUSER_NAME', 'admin')
|
|
su_email = environ.get('SUPERUSER_EMAIL', 'admin@example.com')
|
|
su_password = _read_secret('superuser_password', environ.get('SUPERUSER_PASSWORD'))
|
|
su_api_token = _read_secret('superuser_api_token', environ.get('SUPERUSER_API_TOKEN'))
|
|
su_api_key = _read_secret('superuser_api_key', environ.get('SUPERUSER_API_KEY'))
|
|
|
|
if User.objects.filter(username=su_name).exists():
|
|
print(f'User with name "{su_name}" already exists.')
|
|
sys.exit(0)
|
|
|
|
if not su_password:
|
|
print(
|
|
'⚠️ Warning: No superuser password provided. Please set the SUPERUSER_PASSWORD environment variable or provide a secret file. The superuser will not be created.'
|
|
)
|
|
sys.exit(0)
|
|
|
|
u = User.objects.create_superuser(su_name, su_email, su_password)
|
|
if not settings.API_TOKEN_PEPPERS:
|
|
print('⚠️ No API token was created as API_TOKEN_PEPPERS is not set')
|
|
print(f'💡 Superuser Username: {su_name}, E-Mail: {su_email}')
|
|
else:
|
|
if su_api_key and su_api_token:
|
|
t = Token.objects.create(user=u, token=su_api_token, version=TokenVersionChoices.V2, key=su_api_key)
|
|
print(f'💡 Superuser Username: {su_name}, E-Mail: {su_email},')
|
|
print(f"💡 API Token: use with '{t.get_auth_header_prefix()}<Your token>'")
|
|
else:
|
|
print('⚠️ No API token was created for the superuser as SUPERUSER_API_TOKEN and SUPERUSER_API_KEY are not set')
|
|
print(f'💡 Superuser Username: {su_name}, E-Mail: {su_email}')
|