admin test
Showing
3 changed files
with
54 additions
and
12 deletions
... | @@ -6,6 +6,9 @@ from common import response | ... | @@ -6,6 +6,9 @@ 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 | ||
9 | 12 | ||
10 | # Create your views here. | 13 | # Create your views here. |
11 | 14 | ||
... | @@ -51,20 +54,34 @@ class LoginView(ObtainJSONWebToken, GenericView): | ... | @@ -51,20 +54,34 @@ class LoginView(ObtainJSONWebToken, GenericView): |
51 | class IWALoginView(IWABaseView, GenericView): | 54 | class IWALoginView(IWABaseView, GenericView): |
52 | 55 | ||
53 | def post(self, request, *args, **kwargs): | 56 | def post(self, request, *args, **kwargs): |
54 | code = request.data.get('code', '') | 57 | # code = request.data.get('code', '') |
55 | # redirect_uri = request.data.get('redirect_uri', '') | 58 | is_admin = request.data.get('state', '') == 'admin' |
56 | iwa_res = self.get_q_number(conf.IWA_URL, code, conf.IWA_REDIRECT_URI, client_id_base64) | 59 | # q_number = self.get_q_number(conf.IWA_URL, code, conf.IWA_REDIRECT_URI, client_id_base64) |
57 | q_number = iwa_res.get('sub', '') | ||
58 | self.running_log.info('iwa_res: {0}'.format(iwa_res)) | ||
59 | 60 | ||
60 | is_valid, data = self.validate(q_number) | 61 | q_number = 'zwq' |
61 | 62 | ||
62 | self.running_log.info('[users.iwalogin] [username: {0}] [params: {1}]'.format(q_number, request.data)) | 63 | if is_admin: |
63 | 64 | ||
64 | if is_valid: | 65 | self.running_log.info('[admin_users.iwalogin] [username: {0}] [params: {1}]'.format(q_number, request.data)) |
65 | return response.ok(data=data) | 66 | |
67 | is_valid, data = self.validate_admin(q_number) | ||
68 | |||
69 | if is_valid: | ||
70 | auth_login(request, data) | ||
71 | index_path = reverse('admin:index') | ||
72 | return HttpResponseRedirect(index_path) | ||
73 | else: | ||
74 | self.no_permission(data) | ||
66 | else: | 75 | else: |
67 | self.no_permission(data) | 76 | |
77 | self.running_log.info('[users.iwalogin] [username: {0}] [params: {1}]'.format(q_number, request.data)) | ||
78 | |||
79 | is_valid, data = self.validate(q_number) | ||
80 | |||
81 | if is_valid: | ||
82 | return response.ok(data=data) | ||
83 | else: | ||
84 | self.no_permission(data) | ||
68 | 85 | ||
69 | 86 | ||
70 | class IWAUrlView(IWABaseView, GenericView): | 87 | class IWAUrlView(IWABaseView, GenericView): | ... | ... |
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 |
... | @@ -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): |
24 | return HttpResponseRedirect(iwa_admin_url) | 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) | ||
29 | # return HttpResponseRedirect(iwa_admin_url) | ||
30 | return HttpResponseRedirect('https://staging-bmw-ocr.situdata.com/login?state=admin') | ||
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 | ... | ... |
-
Please register or sign in to post a comment