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:
Kevin McCarthy 2007-09-05 15:54:04 -07:00
parent 945713ca30
commit d036eb0ac9
7 changed files with 75 additions and 0 deletions

View File

@ -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"

View File

@ -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):

View File

@ -0,0 +1 @@
# __init__.py

View 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)

View File

@ -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;

View File

@ -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>

View File

@ -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>