diff --git a/apps/applications/models.py b/apps/applications/models.py index 1cfbd7a98..29adecdae 100644 --- a/apps/applications/models.py +++ b/apps/applications/models.py @@ -14,7 +14,8 @@ class Terminal(models.Model): name = models.CharField(max_length=30, unique=True, verbose_name=_('Name')) remote_addr = models.GenericIPAddressField(verbose_name=_('Remote address'), blank=True, null=True) type = models.CharField(choices=TYPE_CHOICES, max_length=3, blank=True, verbose_name=_('Terminal type')) - user = models.OneToOneField(User, related_name='terminal', verbose_name='Application user', null=True) + user = models.OneToOneField(User, related_name='terminal', verbose_name='Application user', + null=True, on_delete=models.CASCADE) url = models.CharField(max_length=100, blank=True, verbose_name=_('URL to login')) is_accepted = models.BooleanField(default=False, verbose_name='Is Accepted') date_created = models.DateTimeField(auto_now_add=True) @@ -38,6 +39,11 @@ class Terminal(models.Model): self.save() return user, access_key + def delete(self, using=None, keep_parents=False): + if self.user: + self.user.delete() + return super(Terminal, self).delete(using=using, keep_parents=keep_parents) + def __unicode__(self): active = 'Active' if self.user and self.user.is_active else 'Disabled' return '%s: %s' % (self.name, active) diff --git a/apps/applications/templates/applications/terminal_list.html b/apps/applications/templates/applications/terminal_list.html index f4956d72d..8dc7907ad 100644 --- a/apps/applications/templates/applications/terminal_list.html +++ b/apps/applications/templates/applications/terminal_list.html @@ -76,7 +76,9 @@ $(document).ready(function(){ .replace('99991938', rowData.name); var accept_btn = '{% trans "Accept" %} ' .replace('99991937', cellData); - var reject_btn = '{% trans "Reject" %}' + var reject_btn = '{% trans "Reject" %}' + .replace('99991937', cellData) + .replace('99991938', rowData.name); if (rowData.is_accepted) { $(td).html(update_btn + delete_btn) } else { diff --git a/apps/audits/utils.py b/apps/audits/utils.py index 00190e755..8e4cd9949 100644 --- a/apps/audits/utils.py +++ b/apps/audits/utils.py @@ -35,14 +35,15 @@ def get_ip_city(ip, timeout=10): url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=%s&format=json' % ip try: r = requests.get(url, timeout=timeout) + print(r) except requests.Timeout: r = None city = 'Unknown' if r and r.status_code == 200: try: data = r.json() - if data['code'] == 0: - city = data['data']['country'] + data['data']['city'] + if not isinstance(data, int) and data['ret'] == 1: + city = data['country'] + ' ' + data['city'] except ValueError: pass return city diff --git a/apps/users/api.py b/apps/users/api.py index 765893e44..16104c371 100644 --- a/apps/users/api.py +++ b/apps/users/api.py @@ -121,7 +121,7 @@ class UserAuthApi(APIView): password = request.data.get('password', '') public_key = request.data.get('public_key', '') login_type = request.data.get('login_type', '') - login_ip = request.META.get('REMOTE_ADDR', '') + login_ip = request.data.get('remote_addr', None) or request.META.get('REMOTE_ADDR', '') user_agent = request.data.get('HTTP_USER_AGENT', '') user, msg = check_user_valid(username=username, password=password, public_key=public_key) diff --git a/apps/users/utils.py b/apps/users/utils.py index 41931cb3a..2f1da6924 100644 --- a/apps/users/utils.py +++ b/apps/users/utils.py @@ -195,10 +195,10 @@ def check_user_valid(**kwargs): elif not user.is_valid: return None, _('Disabled or expired') - if password and user.check_password(password): + if password and user.password and user.check_password(password): return user, '' - if public_key: + if public_key and user.public_key: public_key_saved = user.public_key.split() if len(public_key_saved) == 1: if public_key == public_key_saved[0]: