summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin McCarthy <kmccarth@redhat.com>2007-09-05 15:54:04 -0700
committerKevin McCarthy <kmccarth@redhat.com>2007-09-05 15:54:04 -0700
commitd036eb0ac95b541c0e4ab65a03acf72bcc8e27a8 (patch)
tree8f06937d5bc78d21e97b89eba396576c1006e60e
parent945713ca30475bc1f87029cf98adb50b24812c8e (diff)
downloadfreeipa-d036eb0ac95b541c0e4ab65a03acf72bcc8e27a8.tar.gz
freeipa-d036eb0ac95b541c0e4ab65a03acf72bcc8e27a8.tar.xz
freeipa-d036eb0ac95b541c0e4ab65a03acf72bcc8e27a8.zip
Add password expiration messages to user show/edit pages.
Add userhelper module to provide ui logic. Fix uid/email suggest to lowercase first.
-rw-r--r--ipa-server/ipa-gui/ipagui/controllers.py7
-rw-r--r--ipa-server/ipa-gui/ipagui/forms/user.py2
-rw-r--r--ipa-server/ipa-gui/ipagui/helpers/__init__.py1
-rw-r--r--ipa-server/ipa-gui/ipagui/helpers/userhelper.py23
-rw-r--r--ipa-server/ipa-gui/ipagui/static/css/style.css6
-rw-r--r--ipa-server/ipa-gui/ipagui/templates/useredit.kid18
-rw-r--r--ipa-server/ipa-gui/ipagui/templates/usershow.kid18
7 files changed, 75 insertions, 0 deletions
diff --git a/ipa-server/ipa-gui/ipagui/controllers.py b/ipa-server/ipa-gui/ipagui/controllers.py
index 5fb4be06b..047b51876 100644
--- a/ipa-server/ipa-gui/ipagui/controllers.py
+++ b/ipa-server/ipa-gui/ipagui/controllers.py
@@ -17,6 +17,7 @@ import ipa.ipaclient
import ipa.user
import xmlrpclib
import forms.user
+from helpers import userhelper
from ipa import ipaerror
ipa.config.init_config()
@@ -203,6 +204,9 @@ class Root(controllers.RootController):
if (len(givenname) == 0) or (len(sn) == 0):
return ""
+ givenname = givenname.lower()
+ sn = sn.lower()
+
uid = givenname[0] + sn[:7]
try:
client.get_user_by_uid(uid)
@@ -244,6 +248,9 @@ class Root(controllers.RootController):
if (len(givenname) == 0) or (len(sn) == 0):
return ""
+ givenname = givenname.lower()
+ sn = sn.lower()
+
# TODO - get from config
domain = "freeipa.org"
diff --git a/ipa-server/ipa-gui/ipagui/forms/user.py b/ipa-server/ipa-gui/ipagui/forms/user.py
index b9b6f33d4..db4bd7d5b 100644
--- a/ipa-server/ipa-gui/ipagui/forms/user.py
+++ b/ipa-server/ipa-gui/ipagui/forms/user.py
@@ -23,6 +23,7 @@ class UserFields():
uid_hidden = widgets.HiddenField(name="uid")
uidnumber_hidden = widgets.HiddenField(name="uidnumber")
gidnumber_hidden = widgets.HiddenField(name="gidnumber")
+ krbPasswordExpiration_hidden = widgets.HiddenField(name="krbPasswordExpiration")
user_orig = widgets.HiddenField(name="user_orig")
@@ -53,6 +54,7 @@ class UserEditForm(widgets.Form):
fields = [UserFields.givenname, UserFields.sn, UserFields.mail,
UserFields.uid_hidden, UserFields.user_orig,
UserFields.uidnumber_hidden, UserFields.gidnumber_hidden,
+ UserFields.krbPasswordExpiration_hidden,
]
def __init__(self, *args, **kw):
diff --git a/ipa-server/ipa-gui/ipagui/helpers/__init__.py b/ipa-server/ipa-gui/ipagui/helpers/__init__.py
new file mode 100644
index 000000000..143f486c0
--- /dev/null
+++ b/ipa-server/ipa-gui/ipagui/helpers/__init__.py
@@ -0,0 +1 @@
+# __init__.py
diff --git a/ipa-server/ipa-gui/ipagui/helpers/userhelper.py b/ipa-server/ipa-gui/ipagui/helpers/userhelper.py
new file mode 100644
index 000000000..2a2571dbe
--- /dev/null
+++ b/ipa-server/ipa-gui/ipagui/helpers/userhelper.py
@@ -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)
diff --git a/ipa-server/ipa-gui/ipagui/static/css/style.css b/ipa-server/ipa-gui/ipagui/static/css/style.css
index 9ea86ae01..cefb63169 100644
--- a/ipa-server/ipa-gui/ipagui/static/css/style.css
+++ b/ipa-server/ipa-gui/ipagui/static/css/style.css
@@ -140,6 +140,12 @@ body {
font-weight: bolder;
}
+.warning_message {
+ font-size: 120%;
+ color: #ee0000;
+ font-weight: bolder;
+}
+
.fielderror {
color: red;
font-weight: bold;
diff --git a/ipa-server/ipa-gui/ipagui/templates/useredit.kid b/ipa-server/ipa-gui/ipagui/templates/useredit.kid
index db47ab298..1f31139d1 100644
--- a/ipa-server/ipa-gui/ipagui/templates/useredit.kid
+++ b/ipa-server/ipa-gui/ipagui/templates/useredit.kid
@@ -8,6 +8,24 @@
<body>
<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)}
</body>
</html>
diff --git a/ipa-server/ipa-gui/ipagui/templates/usershow.kid b/ipa-server/ipa-gui/ipagui/templates/usershow.kid
index 4e73eba35..b4ec46634 100644
--- a/ipa-server/ipa-gui/ipagui/templates/usershow.kid
+++ b/ipa-server/ipa-gui/ipagui/templates/usershow.kid
@@ -8,6 +8,24 @@
<body>
<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>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>