-
{gettext('Web API Auth Token')}
-
-
-
+
+
+
{gettext('Web API Auth Token')}
+ {authToken ? (
+
+
+
+
+
+
+
+
+ ) : (
+
+ )}
-
+
);
}
}
diff --git a/seahub/api2/endpoints/auth_token_by_session.py b/seahub/api2/endpoints/auth_token_by_session.py
index b3e4039b9c..86b02cd949 100644
--- a/seahub/api2/endpoints/auth_token_by_session.py
+++ b/seahub/api2/endpoints/auth_token_by_session.py
@@ -6,7 +6,8 @@ from rest_framework.views import APIView
from rest_framework import status
from seahub.api2.throttling import UserRateThrottle
-from seahub.api2.utils import get_token_v1, api_error
+from seahub.api2.utils import api_error
+from seahub.api2.models import Token
from seahub.settings import ENABLE_GET_AUTH_TOKEN_BY_SESSION
@@ -25,6 +26,35 @@ class AuthTokenBySession(APIView):
error_msg = 'Feature is not enabled.'
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
- token = get_token_v1(request.user.username)
+ username = request.user.username
+ try:
+ token_obj = Token.objects.get(user=username)
+ token = token_obj.key
+ except Token.DoesNotExist:
+ token = ''
- return Response({'token': token.key})
+ return Response({'token': token})
+
+ def post(self, request):
+
+ if not ENABLE_GET_AUTH_TOKEN_BY_SESSION:
+ error_msg = 'Feature is not enabled.'
+ return api_error(status.HTTP_403_FORBIDDEN, error_msg)
+
+ username = request.user.username
+ if len(Token.objects.filter(user=username)) > 0:
+ return api_error(status.HTTP_409_CONFLICT, 'Token already exists.')
+
+ token_obj = Token.objects.add_or_update(username)
+ return Response({'token': token_obj.key})
+
+ def delete(self, request):
+
+ if not ENABLE_GET_AUTH_TOKEN_BY_SESSION:
+ error_msg = 'Feature is not enabled.'
+ return api_error(status.HTTP_403_FORBIDDEN, error_msg)
+
+ username = request.user.username
+ Token.objects.filter(user=username).delete()
+
+ return Response({'success': True})
diff --git a/seahub/api2/models.py b/seahub/api2/models.py
index 22e9c5df16..d41a7eceaa 100644
--- a/seahub/api2/models.py
+++ b/seahub/api2/models.py
@@ -15,6 +15,27 @@ from seahub.base.fields import LowerCaseCharField
DESKTOP_PLATFORMS = ('windows', 'linux', 'mac')
MOBILE_PLATFORMS = ('ios', 'android')
+
+class TokenManager(models.Manager):
+
+ def add_or_update(self, username, key=''):
+
+ """Add or update user auth token.
+ """
+ try:
+ token_obj = self.get(user=username)
+ except Token.DoesNotExist:
+ token_obj = self.model(user=username)
+
+ if key is not None:
+ token_obj.key = key
+ else:
+ token_obj.key = self.generate_key()
+
+ token_obj.save(using=self._db)
+ return token_obj
+
+
class Token(models.Model):
"""
The default authorization token model.
@@ -23,6 +44,8 @@ class Token(models.Model):
user = LowerCaseCharField(max_length=255, unique=True)
created = models.DateTimeField(auto_now_add=True)
+ objects = TokenManager()
+
def save(self, *args, **kwargs):
if not self.key:
self.key = self.generate_key()