]> git.ipfire.org Git - ipfire.org.git/blobdiff - src/backend/accounts.py
people: Show list of recently created user accounts
[ipfire.org.git] / src / backend / accounts.py
index d68e273986ed9ebe9f394e55b67ad5023790a715..1b59882c5962b38fc778451acbfb87ac6b7cfc94 100644 (file)
@@ -54,7 +54,8 @@ class Accounts(Object):
                logging.info("Successfully authenticated as %s" % self.ldap.whoami_s())
 
        def _query(self, query, attrlist=None, limit=0, search_base=None):
-               logging.debug("Performing LDAP query: %s" % query)
+               logging.debug("Performing LDAP query (%s): %s" \
+                       % (search_base or self.search_base, query))
 
                t = time.time()
 
@@ -78,7 +79,8 @@ class Accounts(Object):
                """
                        Fetches all attributes for the given distinguished name
                """
-               results = self._query("(objectClass=*)", search_base=dn, limit=1)
+               results = self._query("(objectClass=*)", search_base=dn, limit=1,
+                       attrlist=("*", "createTimestamp", "modifyTimestamp"))
 
                for dn, attrs in results:
                        return attrs
@@ -94,6 +96,11 @@ class Accounts(Object):
 
                return Account(self.backend, dn, attrs)
 
+       def get_created_after(self, ts):
+               t = ts.strftime("%Y%m%d%H%M%SZ")
+
+               return self._search("(&(objectClass=person)(createTimestamp>=%s))" % t)
+
        def search(self, query):
                # Search for exact matches
                accounts = self._search(
@@ -322,6 +329,12 @@ class Account(Object):
                for value in self._get_strings(key):
                        yield phonenumbers.parse(value, None)
 
+       def _get_timestamp(self, key):
+               value = self._get_string(key)
+
+               # Parse the timestamp value and returns a datetime object
+               return datetime.datetime.strptime(value, "%Y%m%d%H%M%SZ")
+
        def _modify(self, modlist):
                logging.debug("Modifying %s: %s" % (self.dn, modlist))
 
@@ -540,6 +553,16 @@ class Account(Object):
 
                return groups
 
+       # Created/Modified at
+
+       @property
+       def created_at(self):
+               return self._get_timestamp("createTimestamp")
+
+       @property
+       def modified_at(self):
+               return self._get_timestamp("modifyTimestamp")
+
        # Address
 
        @property