admin test
Showing
3 changed files
with
50 additions
and
8 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,16 +54,30 @@ class LoginView(ObtainJSONWebToken, GenericView): | ... | @@ -51,16 +54,30 @@ 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' |
| 62 | |||
| 63 | if is_admin: | ||
| 64 | |||
| 65 | self.running_log.info('[admin_users.iwalogin] [username: {0}] [params: {1}]'.format(q_number, request.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) | ||
| 75 | else: | ||
| 61 | 76 | ||
| 62 | self.running_log.info('[users.iwalogin] [username: {0}] [params: {1}]'.format(q_number, request.data)) | 77 | self.running_log.info('[users.iwalogin] [username: {0}] [params: {1}]'.format(q_number, request.data)) |
| 63 | 78 | ||
| 79 | is_valid, data = self.validate(q_number) | ||
| 80 | |||
| 64 | if is_valid: | 81 | if is_valid: |
| 65 | return response.ok(data=data) | 82 | return response.ok(data=data) |
| 66 | else: | 83 | else: | ... | ... |
| 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