ba9f0a4c by 周伟奇

Merge branch 'feature/admin2'

2 parents 5627b5c6 7197f405
...@@ -6,4 +6,5 @@ urlpatterns = [ ...@@ -6,4 +6,5 @@ urlpatterns = [
6 path(r'login/', views.LoginView.as_view()), 6 path(r'login/', views.LoginView.as_view()),
7 path(r'iwalogin/', views.IWALoginView.as_view()), 7 path(r'iwalogin/', views.IWALoginView.as_view()),
8 path(r'iwaurl/', views.IWAUrlView.as_view()), 8 path(r'iwaurl/', views.IWAUrlView.as_view()),
9 path(r'adminlogin/', views.AdminLoginView.as_view()),
9 ] 10 ]
......
...@@ -6,6 +6,11 @@ from common import response ...@@ -6,6 +6,11 @@ from common import response
6 from common.redis_cache import redis_handler as rh 6 from common.redis_cache import redis_handler as rh
7 from .consts import LOGIN_TIMES_LIMIT_EXPIRES, LOGIN_TIMES_LIMIT 7 from .consts import LOGIN_TIMES_LIMIT_EXPIRES, LOGIN_TIMES_LIMIT
8 from settings import conf 8 from settings import conf
9 from django.urls import reverse
10 from django.http import HttpResponseRedirect
11 from django.contrib.auth import login as auth_login
12 from django.conf import settings
13 from django.shortcuts import resolve_url, redirect
9 14
10 # Create your views here. 15 # Create your views here.
11 16
...@@ -53,15 +58,28 @@ class IWALoginView(IWABaseView, GenericView): ...@@ -53,15 +58,28 @@ class IWALoginView(IWABaseView, GenericView):
53 58
54 def post(self, request, *args, **kwargs): 59 def post(self, request, *args, **kwargs):
55 code = request.data.get('code', '') 60 code = request.data.get('code', '')
56 # redirect_uri = request.data.get('redirect_uri', '') 61 # is_admin = request.data.get('state', '') == 'admin'
57 iwa_res = self.get_q_number(conf.IWA_URL, code, conf.IWA_REDIRECT_URI, client_id_base64) 62 q_number = self.get_q_number(conf.IWA_URL, code, conf.IWA_REDIRECT_URI, client_id_base64)
58 q_number = iwa_res.get('sub', '') 63
59 self.running_log.info('iwa_res: {0}'.format(iwa_res)) 64 # if is_admin:
60 65 #
61 is_valid, data = self.validate(q_number) 66 # self.running_log.info('[admin_users.iwalogin] [username: {0}] [params: {1}]'.format(q_number, request.data))
67 #
68 # is_valid, data = self.validate_admin(q_number)
69 #
70 # if is_valid:
71 # request.user = data
72 # auth_login(request, data)
73 # index_path = reverse('admin:index')
74 # return HttpResponseRedirect(index_path)
75 # else:
76 # self.no_permission(data)
77 # else:
62 78
63 self.running_log.info('[users.iwalogin] [username: {0}] [params: {1}]'.format(q_number, request.data)) 79 self.running_log.info('[users.iwalogin] [username: {0}] [params: {1}]'.format(q_number, request.data))
64 80
81 is_valid, data = self.validate(q_number)
82
65 if is_valid: 83 if is_valid:
66 return response.ok(data=data) 84 return response.ok(data=data)
67 else: 85 else:
...@@ -75,3 +93,24 @@ class IWAUrlView(IWABaseView, GenericView): ...@@ -75,3 +93,24 @@ class IWAUrlView(IWABaseView, GenericView):
75 'iwa_url': iwa_url, 93 'iwa_url': iwa_url,
76 } 94 }
77 return response.ok(data=data) 95 return response.ok(data=data)
96
97
98 class AdminLoginView(IWABaseView, GenericView):
99
100 def get(self, request, *args, **kwargs):
101 code = request.GET.get('code', '')
102 # is_admin = request.GET.get('state', '') == 'admin'
103 q_number = self.get_q_number(conf.IWA_URL, code, conf.IWA_REDIRECT_URI, client_id_base64)
104
105 # self.running_log.info('code={0}, is_admin={1}'.format(code, is_admin))
106 self.running_log.info('[admin_users.iwalogin] [username: {0}] [params: {1}]'.format(q_number, request.data))
107
108 is_valid, data = self.validate_admin(q_number)
109
110 if is_valid:
111 request.user = data
112 auth_login(request, data)
113 index_path = reverse('admin:index')
114 return HttpResponseRedirect(index_path)
115 else:
116 self.no_permission(data)
......
1 from django.contrib import admin 1 from django.contrib import admin
2 from django.urls import reverse
2 from django.views.decorators.cache import never_cache 3 from django.views.decorators.cache import never_cache
3 from django.http import HttpResponseRedirect 4 from django.http import HttpResponseRedirect
4 from settings import conf 5 from settings import conf
...@@ -7,7 +8,7 @@ from settings import conf ...@@ -7,7 +8,7 @@ from settings import conf
7 iwa_admin_url_params = { 8 iwa_admin_url_params = {
8 'scope': 'openid', 9 'scope': 'openid',
9 'response_type': 'code', 10 'response_type': 'code',
10 'redirect_uri': conf.IWA_REDIRECT_URI, 11 'redirect_uri': conf.IWA_ADMIN_REDIRECT_URI,
11 'client_id': conf.IWA_CLIENT_ID, 12 'client_id': conf.IWA_CLIENT_ID,
12 'acr_values': 'strongAuth4000Service' 13 'acr_values': 'strongAuth4000Service'
13 } 14 }
...@@ -21,7 +22,12 @@ class MyAdminSite(admin.AdminSite): ...@@ -21,7 +22,12 @@ class MyAdminSite(admin.AdminSite):
21 22
22 @never_cache 23 @never_cache
23 def login(self, request, extra_context=None): 24 def login(self, request, extra_context=None):
25 if request.method == 'GET' and self.has_permission(request):
26 # Already logged-in, redirect to admin index
27 index_path = reverse('admin:index', current_app=self.name)
28 return HttpResponseRedirect(index_path)
24 return HttpResponseRedirect(iwa_admin_url) 29 return HttpResponseRedirect(iwa_admin_url)
30 # return HttpResponseRedirect('https://staging-bmw-ocr.situdata.com/api/user/adminlogin/?state=admin&code=xxx')
25 31
26 32
27 admin_site = MyAdminSite() 33 admin_site = MyAdminSite()
......
...@@ -135,7 +135,7 @@ class IWABaseView: ...@@ -135,7 +135,7 @@ class IWABaseView:
135 iwa_user_url = '{0}intranetb2x/userinfo'.format(iwa_url_base) 135 iwa_user_url = '{0}intranetb2x/userinfo'.format(iwa_url_base)
136 res = requests.get(iwa_user_url, headers=headers) 136 res = requests.get(iwa_user_url, headers=headers)
137 137
138 return res.json() 138 return res.json().get('sub', '')
139 139
140 @staticmethod 140 @staticmethod
141 def validate(q_number): 141 def validate(q_number):
...@@ -159,3 +159,22 @@ class IWABaseView: ...@@ -159,3 +159,22 @@ class IWABaseView:
159 else: 159 else:
160 msg = 'q_number user not found' 160 msg = 'q_number user not found'
161 return False, msg 161 return False, msg
162
163 @staticmethod
164 def validate_admin(q_number):
165 if not q_number:
166 return False, 'get q_number empty'
167 user = get_user_model().objects.filter(username=q_number).first()
168 if user:
169 if not user.is_active:
170 msg = 'User account is disabled.'
171 return False, msg
172
173 if not user.is_superuser:
174 msg = 'User account is not admin user'
175 return False, msg
176
177 return True, user
178 else:
179 msg = 'q_number user not found'
180 return False, msg
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!