butler_ddochi/custom_auth/models.py
icurfer 06d1853fb0
All checks were successful
Build And Test / build-and-push (push) Successful in 4m8s
url link 저장 및 변경 관리 계정에서 할수 있도록 추가
2025-01-25 01:30:48 +09:00

57 lines
2.5 KiB
Python

from django.contrib.auth.models import AbstractUser
from django.db import models
import base64
from cryptography.fernet import Fernet
class CustomUser(AbstractUser):
# 사용자 모델 - 기존 필드 + SSH Private Key 관리 필드
grade = models.CharField(max_length=50, blank=True, null=True)
nhnc_id = models.CharField(max_length=100, blank=True, null=True)
nhnc_api_tenant_id = models.CharField(max_length=100, blank=True, null=True)
# 사용자 모델 - SSH Private Key 관리 필드
encrypted_private_key = models.BinaryField(blank=True, null=True) # 암호화된 SSH 키
# Custom URL 필드 - 2025-01-25
# 여기 추가하면 components/_nav.html 수정
# custom_auth/forms.py 수정, custom_auth/views.py 수정
url_gitea = models.URLField(max_length=200, blank=True, null=True)
url_harbor = models.URLField(max_length=200, blank=True, null=True)
url_argocd = models.URLField(max_length=200, blank=True, null=True)
url_web_ide = models.URLField(max_length=200, blank=True, null=True)
url_rancher = models.URLField(max_length=200, blank=True, null=True)
url_grafana = models.URLField(max_length=200, blank=True, null=True)
url_prometheus = models.URLField(max_length=200, blank=True, null=True)
url_opensearch = models.URLField(max_length=200, blank=True, null=True)
url_kiali = models.URLField(max_length=200, blank=True, null=True)
url_nexus = models.URLField(max_length=200, blank=True, null=True)
url_mattermost = models.URLField(max_length=200, blank=True, null=True)
def encrypt_private_key(self, private_key: str) -> bytes:
"""SSH Private Key 암호화"""
cipher = Fernet(self.get_encryption_key())
return cipher.encrypt(private_key.encode())
def decrypt_private_key(self) -> str:
"""SSH Private Key 복호화"""
if self.encrypted_private_key:
cipher = Fernet(self.get_encryption_key())
return cipher.decrypt(self.encrypted_private_key).decode()
return ""
def save_private_key(self, private_key: str):
"""SSH Private Key 저장 (암호화 후)"""
self.encrypted_private_key = self.encrypt_private_key(private_key)
self.save()
def get_encryption_key(self) -> bytes:
"""Fernet 키 생성 (username 기반)"""
username_encoded = self.username.encode() # 사용자 이름을 바이트로 인코딩
base64_key = base64.urlsafe_b64encode(username_encoded.ljust(32)[:32])
return base64_key
def __str__(self):
return self.username