ssh저장 기능 수정중
All checks were successful
Build And Test / build-and-push (push) Successful in 2m52s

This commit is contained in:
2025-05-20 19:05:36 +09:00
parent 247b6b7fe7
commit 91d3b77c23
4 changed files with 28 additions and 11 deletions

View File

@ -3,7 +3,7 @@ from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseU
import base64
from cryptography.fernet import Fernet
from django.utils import timezone
import base64, hashlib
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):

View File

@ -1,5 +1,5 @@
from django.urls import path
from .views import RegisterView, MeView, CustomTokenObtainPairView, SSHKeyUploadView, SSHKeyInfoView
from .views import RegisterView, MeView, CustomTokenObtainPairView, SSHKeyUploadView, SSHKeyInfoView, SSHKeyRetrieveView
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView, TokenVerifyView
urlpatterns = [
@ -11,4 +11,5 @@ urlpatterns = [
path('me/', MeView.as_view(), name='me'),
path("ssh-key/", SSHKeyUploadView.as_view(), name="ssh_key_upload"),
path("ssh-key/info/", SSHKeyInfoView.as_view(), name="ssh_key_info"),
path("ssh-key/view/", SSHKeyRetrieveView.as_view(), name="ssh_key_retrieve"),
]

View File

@ -1,10 +1,12 @@
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .serializers import RegisterSerializer, CustomTokenObtainPairSerializer
from rest_framework.permissions import IsAuthenticated
from rest_framework_simplejwt.views import TokenObtainPairView
from .serializers import RegisterSerializer, CustomTokenObtainPairSerializer
class RegisterView(APIView):
def post(self, request):
serializer = RegisterSerializer(data=request.data)
@ -24,21 +26,23 @@ class MeView(APIView):
def put(self, request):
user = request.user
serializer = RegisterSerializer(user, data=request.data, partial=True) # ✅ 부분 수정 허용
serializer = RegisterSerializer(user, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class CustomTokenObtainPairView(TokenObtainPairView):
serializer_class = CustomTokenObtainPairSerializer
class SSHKeyUploadView(APIView):
permission_classes = [IsAuthenticated]
def post(self, request):
private_key = request.data.get("private_key")
key_name = request.data.get("key_name") # 여전히 key_name으로 받음
key_name = request.data.get("key_name")
if not private_key or not key_name:
return Response(
@ -54,7 +58,7 @@ class SSHKeyUploadView(APIView):
return Response({"message": "SSH key 저장 완료."})
except Exception as e:
return Response({"error": str(e)}, status=500)
def delete(self, request):
user = request.user
user.encrypted_private_key = None
@ -62,7 +66,8 @@ class SSHKeyUploadView(APIView):
user.last_used_at = None
user.save(update_fields=["encrypted_private_key", "encrypted_private_key_name", "last_used_at"])
return Response({"message": "SSH key deleted."}, status=200)
class SSHKeyInfoView(APIView):
permission_classes = [IsAuthenticated]
@ -72,4 +77,15 @@ class SSHKeyInfoView(APIView):
"has_key": bool(user.encrypted_private_key),
"encrypted_private_key_name": user.encrypted_private_key_name,
"last_used_at": user.last_used_at
})
})
# ✅ 실제 암호화된 키를 반환하는 API
class SSHKeyRetrieveView(APIView):
permission_classes = [IsAuthenticated]
def get(self, request):
user = request.user
if not user.encrypted_private_key:
return Response({"error": "SSH 키가 등록되어 있지 않습니다."}, status=404)
return Response({"ssh_key": user.encrypted_private_key})

View File

@ -1 +1 @@
0.0.9-r1
0.0.10-rc1