Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
586d6e6a
Commit
586d6e6a
authored
Jul 31, 2019
by
BaiJiangJie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Update] 添加用户过期邮件提醒
parent
9ab6c586
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
92 additions
and
21 deletions
+92
-21
django.mo
apps/locale/zh/LC_MESSAGES/django.mo
+0
-0
django.po
apps/locale/zh/LC_MESSAGES/django.po
+0
-0
_message.html
apps/templates/_message.html
+16
-0
user.py
apps/users/models/user.py
+12
-0
tasks.py
apps/users/tasks.py
+27
-5
utils.py
apps/users/utils.py
+37
-16
No files found.
apps/locale/zh/LC_MESSAGES/django.mo
View file @
586d6e6a
No preview for this file type
apps/locale/zh/LC_MESSAGES/django.po
View file @
586d6e6a
This diff is collapsed.
Click to expand it.
apps/templates/_message.html
View file @
586d6e6a
{% load i18n %}
{% block user_expired_message %}
{% if request.user.is_expired %}
<div
class=
"alert alert-danger help-message alert-dismissable"
>
{% blocktrans %}
Your account has expired, please contact the administrator.
{% endblocktrans %}
<button
aria-hidden=
"true"
data-dismiss=
"alert"
class=
"close"
type=
"button"
style=
"outline: none;"
>
×
</button>
</div>
{% elif request.user.will_expired %}
<div
class=
"alert alert-danger help-message alert-dismissable"
>
{% trans 'Your account will at' %} {{ request.user.date_expired }} {% trans 'expired. ' %}
<button
aria-hidden=
"true"
data-dismiss=
"alert"
class=
"close"
type=
"button"
style=
"outline: none;"
>
×
</button>
</div>
{% endif %}
{% endblock %}
{% block password_expired_message %}
{% url 'users:user-password-update' as user_password_update_url %}
{% if request.user.password_has_expired %}
...
...
apps/users/models/user.py
View file @
586d6e6a
...
...
@@ -402,6 +402,18 @@ class User(AuthMixin, TokenMixin, RoleMixin, MFAMixin, AbstractUser):
else
:
return
False
@property
def
expired_remain_days
(
self
):
date_remain
=
self
.
date_expired
-
timezone
.
now
()
return
date_remain
.
days
@property
def
will_expired
(
self
):
if
0
<=
self
.
expired_remain_days
<
5
:
return
True
else
:
return
False
@property
def
is_valid
(
self
):
if
self
.
is_active
and
not
self
.
is_expired
:
...
...
apps/users/tasks.py
View file @
586d6e6a
# -*- coding: utf-8 -*-
#
import
datetime
from
django.utils
import
timezone
from
django.conf
import
settings
from
celery
import
shared_task
from
ops.celery.utils
import
create_or_update_celery_periodic_tasks
from
ops.celery.decorator
import
after_app_ready_start
,
register_as_period_task
from
ops.celery.decorator
import
after_app_ready_start
from
common.utils
import
get_logger
from
.models
import
User
from
.utils
import
send_password_expiration_reminder_mail
from
.utils
import
(
send_password_expiration_reminder_mail
,
send_user_expiration_reminder_mail
)
logger
=
get_logger
(
__file__
)
...
...
@@ -43,4 +42,27 @@ def check_password_expired_periodic():
create_or_update_celery_periodic_tasks
(
tasks
)
@shared_task
def
check_user_expired
():
users
=
User
.
objects
.
exclude
(
role
=
User
.
ROLE_APP
)
for
user
in
users
:
if
not
user
.
is_valid
:
continue
if
not
user
.
will_expired
:
continue
send_user_expiration_reminder_mail
(
user
)
@shared_task
@after_app_ready_start
def
check_user_expired_periodic
():
tasks
=
{
'check_user_expired_periodic'
:
{
'task'
:
check_user_expired
.
name
,
'interval'
:
None
,
'crontab'
:
'0 14 * * *'
,
'enabled'
:
True
,
}
}
create_or_update_celery_periodic_tasks
(
tasks
)
apps/users/utils.py
View file @
586d6e6a
...
...
@@ -89,20 +89,20 @@ def send_reset_password_mail(user):
recipient_list
=
[
user
.
email
]
message
=
_
(
"""
Hello
%(name)
s:
<
/
br>
<br>
Please click the link below to reset your password, if not your request, concern your account security
<
/
br>
<br>
<a href="
%(rest_password_url)
s?token=
%(rest_password_token)
s">Click here reset password</a>
<
/
br>
<br>
This link is valid for 1 hour. After it expires, <a href="
%(forget_password_url)
s?email=
%(email)
s">request new one</a>
<
/
br>
<br>
---
<
/
br>
<br>
<a href="
%(login_url)
s">Login direct</a>
<
/
br>
<br>
"""
)
%
{
'name'
:
user
.
name
,
'rest_password_url'
:
reverse
(
'users:reset-password'
,
external
=
True
),
...
...
@@ -122,24 +122,24 @@ def send_password_expiration_reminder_mail(user):
recipient_list
=
[
user
.
email
]
message
=
_
(
"""
Hello
%(name)
s:
<
/
br>
<br>
Your password will expire in
%(date_password_expired)
s,
<
/
br>
<br>
For your account security, please click on the link below to update your password in time
<
/
br>
<br>
<a href="
%(update_password_url)
s">Click here update password</a>
<
/
br>
<br>
If your password has expired, please click
<a href="
%(forget_password_url)
s?email=
%(email)
s">Password expired</a>
to apply for a password reset email.
<
/
br>
<br>
---
<
/
br>
<br>
<a href="
%(login_url)
s">Login direct</a>
<
/
br>
<br>
"""
)
%
{
'name'
:
user
.
name
,
'date_password_expired'
:
datetime
.
fromtimestamp
(
datetime
.
timestamp
(
...
...
@@ -155,18 +155,39 @@ def send_password_expiration_reminder_mail(user):
send_mail_async
.
delay
(
subject
,
message
,
recipient_list
,
html_message
=
message
)
def
send_user_expiration_reminder_mail
(
user
):
subject
=
_
(
'Expiration notice'
)
recipient_list
=
[
user
.
email
]
message
=
_
(
"""
Hello
%(name)
s:
<br>
Your account will expire in
%(date_expired)
s,
<br>
In order not to affect your normal work, please contact the administrator for confirmation.
<br>
"""
)
%
{
'name'
:
user
.
name
,
'date_expired'
:
datetime
.
fromtimestamp
(
datetime
.
timestamp
(
user
.
date_expired
))
.
strftime
(
'
%
Y-
%
m-
%
d
%
H:
%
M'
),
}
if
settings
.
DEBUG
:
logger
.
debug
(
message
)
send_mail_async
.
delay
(
subject
,
message
,
recipient_list
,
html_message
=
message
)
def
send_reset_ssh_key_mail
(
user
):
subject
=
_
(
'SSH Key Reset'
)
recipient_list
=
[
user
.
email
]
message
=
_
(
"""
Hello
%(name)
s:
<
/
br>
<br>
Your ssh public key has been reset by site administrator.
Please login and reset your ssh public key.
<
/
br>
<br>
<a href="
%(login_url)
s">Login direct</a>
<
/
br>
<br>
"""
)
%
{
'name'
:
user
.
name
,
'login_url'
:
reverse
(
'authentication:login'
,
external
=
True
),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment