mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Add password expiration messages to user show/edit pages.
Add userhelper module to provide ui logic. Fix uid/email suggest to lowercase first.
This commit is contained in:
parent
945713ca30
commit
d036eb0ac9
@ -17,6 +17,7 @@ import ipa.ipaclient
|
|||||||
import ipa.user
|
import ipa.user
|
||||||
import xmlrpclib
|
import xmlrpclib
|
||||||
import forms.user
|
import forms.user
|
||||||
|
from helpers import userhelper
|
||||||
from ipa import ipaerror
|
from ipa import ipaerror
|
||||||
|
|
||||||
ipa.config.init_config()
|
ipa.config.init_config()
|
||||||
@ -203,6 +204,9 @@ class Root(controllers.RootController):
|
|||||||
if (len(givenname) == 0) or (len(sn) == 0):
|
if (len(givenname) == 0) or (len(sn) == 0):
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
givenname = givenname.lower()
|
||||||
|
sn = sn.lower()
|
||||||
|
|
||||||
uid = givenname[0] + sn[:7]
|
uid = givenname[0] + sn[:7]
|
||||||
try:
|
try:
|
||||||
client.get_user_by_uid(uid)
|
client.get_user_by_uid(uid)
|
||||||
@ -244,6 +248,9 @@ class Root(controllers.RootController):
|
|||||||
if (len(givenname) == 0) or (len(sn) == 0):
|
if (len(givenname) == 0) or (len(sn) == 0):
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
givenname = givenname.lower()
|
||||||
|
sn = sn.lower()
|
||||||
|
|
||||||
# TODO - get from config
|
# TODO - get from config
|
||||||
domain = "freeipa.org"
|
domain = "freeipa.org"
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ class UserFields():
|
|||||||
uid_hidden = widgets.HiddenField(name="uid")
|
uid_hidden = widgets.HiddenField(name="uid")
|
||||||
uidnumber_hidden = widgets.HiddenField(name="uidnumber")
|
uidnumber_hidden = widgets.HiddenField(name="uidnumber")
|
||||||
gidnumber_hidden = widgets.HiddenField(name="gidnumber")
|
gidnumber_hidden = widgets.HiddenField(name="gidnumber")
|
||||||
|
krbPasswordExpiration_hidden = widgets.HiddenField(name="krbPasswordExpiration")
|
||||||
|
|
||||||
user_orig = widgets.HiddenField(name="user_orig")
|
user_orig = widgets.HiddenField(name="user_orig")
|
||||||
|
|
||||||
@ -53,6 +54,7 @@ class UserEditForm(widgets.Form):
|
|||||||
fields = [UserFields.givenname, UserFields.sn, UserFields.mail,
|
fields = [UserFields.givenname, UserFields.sn, UserFields.mail,
|
||||||
UserFields.uid_hidden, UserFields.user_orig,
|
UserFields.uid_hidden, UserFields.user_orig,
|
||||||
UserFields.uidnumber_hidden, UserFields.gidnumber_hidden,
|
UserFields.uidnumber_hidden, UserFields.gidnumber_hidden,
|
||||||
|
UserFields.krbPasswordExpiration_hidden,
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, *args, **kw):
|
def __init__(self, *args, **kw):
|
||||||
|
1
ipa-server/ipa-gui/ipagui/helpers/__init__.py
Normal file
1
ipa-server/ipa-gui/ipagui/helpers/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
# __init__.py
|
23
ipa-server/ipa-gui/ipagui/helpers/userhelper.py
Normal file
23
ipa-server/ipa-gui/ipagui/helpers/userhelper.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import sys
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
from ipa import ipautil
|
||||||
|
|
||||||
|
def password_expires_in(datestr):
|
||||||
|
"""Returns the number of days that password expires in. Returns a negative number
|
||||||
|
if the password is already expired."""
|
||||||
|
if (datestr == None) or (datestr == ""):
|
||||||
|
return sys.maxint
|
||||||
|
|
||||||
|
expdate = ipautil.parse_generalized_time(datestr)
|
||||||
|
if not expdate:
|
||||||
|
return sys.maxint
|
||||||
|
|
||||||
|
delta = expdate - datetime.datetime.now()
|
||||||
|
return delta.days
|
||||||
|
|
||||||
|
def password_is_expired(days):
|
||||||
|
return days < 0
|
||||||
|
|
||||||
|
def password_expires_soon(days):
|
||||||
|
return (not password_is_expired(days)) and (days < 7)
|
@ -140,6 +140,12 @@ body {
|
|||||||
font-weight: bolder;
|
font-weight: bolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.warning_message {
|
||||||
|
font-size: 120%;
|
||||||
|
color: #ee0000;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
.fielderror {
|
.fielderror {
|
||||||
color: red;
|
color: red;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
@ -8,6 +8,24 @@
|
|||||||
<body>
|
<body>
|
||||||
<h2>Edit Person</h2>
|
<h2>Edit Person</h2>
|
||||||
|
|
||||||
|
<?python
|
||||||
|
from ipagui.helpers import userhelper
|
||||||
|
pw_expires_days = userhelper.password_expires_in(user.get("krbPasswordExpiration"))
|
||||||
|
pw_expires_soon = userhelper.password_expires_soon(pw_expires_days)
|
||||||
|
pw_is_expired = userhelper.password_is_expired(pw_expires_days)
|
||||||
|
if pw_expires_days != 1:
|
||||||
|
days_suffix = "s"
|
||||||
|
else:
|
||||||
|
days_suffix = ""
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div py:if='pw_expires_soon' class="warning_message">
|
||||||
|
Password will expire in ${pw_expires_days} day${days_suffix}
|
||||||
|
</div>
|
||||||
|
<div py:if='pw_is_expired' class="warning_message">
|
||||||
|
Password has expired
|
||||||
|
</div>
|
||||||
|
|
||||||
${form.display(action="userupdate", value=user)}
|
${form.display(action="userupdate", value=user)}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -8,6 +8,24 @@
|
|||||||
<body>
|
<body>
|
||||||
<h2>View Person</h2>
|
<h2>View Person</h2>
|
||||||
|
|
||||||
|
<?python
|
||||||
|
from ipagui.helpers import userhelper
|
||||||
|
pw_expires_days = userhelper.password_expires_in(user.get("krbPasswordExpiration"))
|
||||||
|
pw_expires_soon = userhelper.password_expires_soon(pw_expires_days)
|
||||||
|
pw_is_expired = userhelper.password_is_expired(pw_expires_days)
|
||||||
|
if pw_expires_days != 1:
|
||||||
|
days_suffix = "s"
|
||||||
|
else:
|
||||||
|
days_suffix = ""
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div py:if='pw_expires_soon' class="warning_message">
|
||||||
|
Password will expire in ${pw_expires_days} day${days_suffix}
|
||||||
|
</div>
|
||||||
|
<div py:if='pw_is_expired' class="warning_message">
|
||||||
|
Password has expired
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="formsection">Identity Details</div>
|
<div class="formsection">Identity Details</div>
|
||||||
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
|
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
|
||||||
<tr>
|
<tr>
|
||||||
|
Loading…
Reference in New Issue
Block a user