This commit is contained in:
@ -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):
|
||||
|
@ -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"),
|
||||
]
|
||||
|
@ -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})
|
||||
|
Reference in New Issue
Block a user