mirror of https://github.com/jumpserver/jumpserver
Update api
parent
0e4804b59f
commit
d964221689
|
@ -1,6 +1,7 @@
|
||||||
# ~*~ coding: utf-8 ~*~
|
# ~*~ coding: utf-8 ~*~
|
||||||
#
|
#
|
||||||
|
|
||||||
|
import base64
|
||||||
|
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
@ -84,6 +85,31 @@ class UserGroupUpdateUserApi(generics.RetrieveUpdateAPIView):
|
||||||
permission_classes = (IsSuperUser,)
|
permission_classes = (IsSuperUser,)
|
||||||
|
|
||||||
|
|
||||||
|
class UserToken(APIView):
|
||||||
|
permission_classes = (IsValidUser,)
|
||||||
|
expiration = settings.CONFIG.TOKEN_EXPIRATION or 3600
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
if not request.user:
|
||||||
|
return Response({'error': 'unauthorized'})
|
||||||
|
|
||||||
|
remote_addr = request.META.get('REMOTE_ADDR', '')
|
||||||
|
remote_addr = base64.b16encode(remote_addr).replace('=', '')
|
||||||
|
token = cache.get('%s_%s' % (request.user.id, remote_addr))
|
||||||
|
if not token:
|
||||||
|
token = token_gen(request.user)
|
||||||
|
cache.set(token, request.user.id, self.expiration)
|
||||||
|
cache.set('%s_%s' % (request.user.id, remote_addr), token, self.expiration)
|
||||||
|
return Response({'token': token})
|
||||||
|
|
||||||
|
|
||||||
|
class UserProfile(APIView):
|
||||||
|
permission_classes = (IsValidUser,)
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
return Response(request.user.to_json())
|
||||||
|
|
||||||
|
|
||||||
class UserAuthApi(APIView):
|
class UserAuthApi(APIView):
|
||||||
permission_classes = ()
|
permission_classes = ()
|
||||||
expiration = settings.CONFIG.TOKEN_EXPIRATION or 3600
|
expiration = settings.CONFIG.TOKEN_EXPIRATION or 3600
|
||||||
|
@ -106,6 +132,7 @@ class UserAuthApi(APIView):
|
||||||
cache.set('%s_%s' % (user.id, remote_addr), token, self.expiration)
|
cache.set('%s_%s' % (user.id, remote_addr), token, self.expiration)
|
||||||
write_login_log_async.delay(user.username, name=user.name, terminal=terminal,
|
write_login_log_async.delay(user.username, name=user.name, terminal=terminal,
|
||||||
login_ip=remote_addr, login_type=login_type)
|
login_ip=remote_addr, login_type=login_type)
|
||||||
return Response({'token': token, 'id': user.id, 'username': user.username, 'name': user.name})
|
return Response({'token': token, 'id': user.id, 'username': user.username,
|
||||||
|
'name': user.name, 'is_active': user.is_active})
|
||||||
else:
|
else:
|
||||||
return Response({'msg': 'Invalid password or public key or user is not active or expired'}, status=401)
|
return Response({'msg': 'Invalid password or public key or user is not active or expired'}, status=401)
|
||||||
|
|
|
@ -52,7 +52,7 @@ class TerminalAuthentication(authentication.BaseAuthentication):
|
||||||
|
|
||||||
|
|
||||||
class AccessTokenAuthentication(authentication.BaseAuthentication):
|
class AccessTokenAuthentication(authentication.BaseAuthentication):
|
||||||
keyword = 'Token'
|
keyword = 'Bearer'
|
||||||
model = User
|
model = User
|
||||||
expiration = settings.CONFIG.TOKEN_EXPIRATION or 3600
|
expiration = settings.CONFIG.TOKEN_EXPIRATION or 3600
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,12 @@
|
||||||
# ~*~ coding: utf-8 ~*~
|
# ~*~ coding: utf-8 ~*~
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.contrib.auth import logout
|
|
||||||
from django.contrib.auth.hashers import make_password
|
from django.contrib.auth.hashers import make_password
|
||||||
from django.contrib.auth.models import AbstractUser
|
from django.contrib.auth.models import AbstractUser
|
||||||
from django.core import signing
|
from django.core import signing
|
||||||
from django.db import models, IntegrityError
|
from django.db import models, IntegrityError
|
||||||
from django.db.models.signals import post_save
|
|
||||||
from django.dispatch import receiver
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.shortcuts import reverse
|
from django.shortcuts import reverse
|
||||||
|
@ -202,6 +199,22 @@ class User(AbstractUser):
|
||||||
def generate_reset_token(self):
|
def generate_reset_token(self):
|
||||||
return signer.sign_t({'reset': self.id, 'email': self.email}, expires_in=3600)
|
return signer.sign_t({'reset': self.id, 'email': self.email}, expires_in=3600)
|
||||||
|
|
||||||
|
def to_json(self):
|
||||||
|
return OrderedDict({
|
||||||
|
'id': self.id,
|
||||||
|
'username': self.username,
|
||||||
|
'name': self.name,
|
||||||
|
'email': self.email,
|
||||||
|
'is_active': self.is_active,
|
||||||
|
'is_superuser': self.is_superuser,
|
||||||
|
'role': self.get_role_display(),
|
||||||
|
'groups': [group.name for group in self.groups.all()],
|
||||||
|
'wechat': self.wechat,
|
||||||
|
'phone': self.phone,
|
||||||
|
'comment': self.comment,
|
||||||
|
'date_expired': self.date_expired.strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
})
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def validate_reset_token(cls, token):
|
def validate_reset_token(cls, token):
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -16,15 +16,11 @@ router.register(r'v1/user-groups', api.UserGroupViewSet, 'user-group')
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
# url(r'^v1/users/$', api.UserListUpdateApi.as_view(), name='user-bulk-update-api'),
|
url(r'^v1/users/token/$', api.UserToken.as_view(), name='user-token'),
|
||||||
url(r'^v1/users/token/$', api.UserAuthApi.as_view(), name='user-token'),
|
url(r'^v1/users/profile/$', api.UserProfile.as_view(), name='user-profile'),
|
||||||
url(r'^v1/users/(?P<pk>\d+)/reset-password/$', api.UserResetPasswordApi.as_view(), name='user-reset-password'),
|
url(r'^v1/users/(?P<pk>\d+)/reset-password/$', api.UserResetPasswordApi.as_view(), name='user-reset-password'),
|
||||||
url(r'^v1/users/(?P<pk>\d+)/reset-pk/$', api.UserResetPKApi.as_view(), name='user-reset-pk'),
|
url(r'^v1/users/(?P<pk>\d+)/reset-pk/$', api.UserResetPKApi.as_view(), name='user-reset-pk'),
|
||||||
url(r'^v1/users/(?P<pk>\d+)/update-pk/$', api.UserUpdatePKApi.as_view(), name='user-update-pk'),
|
url(r'^v1/users/(?P<pk>\d+)/update-pk/$', api.UserUpdatePKApi.as_view(), name='user-update-pk'),
|
||||||
# url(r'^v1/user-groups/$', api.GroupListUpdateApi.as_view(), name='user-group-bulk-update-api'),
|
|
||||||
# url(r'^v1/user-groups/(?P<pk>\d+)/$', api.GroupDetailApi.as_view(), name='user-group-detail-api'),
|
|
||||||
# url(r'^v1/user-groups/(?P<pk>\d+)/user/(?P<uid>\d+)/$',
|
|
||||||
# api.DeleteUserFromGroupApi.as_view(), name='delete-user-from-group-api'),
|
|
||||||
url(r'^v1/users/(?P<pk>\d+)/groups/$',
|
url(r'^v1/users/(?P<pk>\d+)/groups/$',
|
||||||
api.UserUpdateGroupApi.as_view(), name='user-update-group'),
|
api.UserUpdateGroupApi.as_view(), name='user-update-group'),
|
||||||
url(r'^v1/user-groups/(?P<pk>\d+)/users/$',
|
url(r'^v1/user-groups/(?P<pk>\d+)/users/$',
|
||||||
|
|
Loading…
Reference in New Issue