Skip to content

Commit

Permalink
support login user via auth token
Browse files Browse the repository at this point in the history
  • Loading branch information
imwhatiam committed Nov 28, 2023
1 parent f88be4b commit 79e8d45
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
2 changes: 2 additions & 0 deletions seahub/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

from seahub.auth.views import multi_adfs_sso
from seahub.views import *
from seahub.views.mobile import mobile_login
from seahub.views.sysadmin import *
from seahub.views.ajax import *
from seahub.views.sso import *
Expand Down Expand Up @@ -206,6 +207,7 @@

urlpatterns = [
path('accounts/', include('seahub.base.registration_urls')),
path('mobile-login/', mobile_login, name="mobile_login"),

path('sso/', sso, name='sso'),
path('multi_adfs_sso/', multi_adfs_sso, name='multi_adfs_sso'),
Expand Down
44 changes: 44 additions & 0 deletions seahub/views/mobile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from django.http import HttpResponseRedirect
from django.utils.translation import gettext as _

from seahub.utils import render_error
from seahub.settings import SITE_ROOT
from seahub.api2.models import Token, TokenV2
from seahub.auth import REDIRECT_FIELD_NAME, login
from seahub.base.accounts import User, AuthBackend


def mobile_login(request):

"""
Login user via seahub web api auth token
"""

auth = request.headers.get('authorization', '').split()
if not auth or auth[0].lower() != 'token':
return render_error(request, 'token invalid.')

key = auth[1]
try:
token = Token.objects.get(key=key)
except Token.DoesNotExist:
try:
token = TokenV2.objects.get(key=key)
except TokenV2.DoesNotExist:
return render_error(request, 'token invalid.')

try:
user = User.objects.get(email=token.user)
except User.DoesNotExist:
error_msg = _(f'User {token.user} not found.')
return render_error(request, error_msg)

if not user.is_active:
error_msg = _(f'User {token.user} inactive.')
return render_error(request, error_msg)

user.backend = AuthBackend.__module__ + ".AuthBackend"
login(request, user)

redirect_to = request.GET.get(REDIRECT_FIELD_NAME, SITE_ROOT)
return HttpResponseRedirect(redirect_to)

0 comments on commit 79e8d45

Please sign in to comment.